H4Mm3r Posted October 8, 2015 Group: Members Topic Count: 8 Topics Per Day: 0.00 Content Count: 24 Reputation: 1 Joined: 09/22/15 Last Seen: November 8, 2015 Share 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 Link to comment Share on other sites More sharing options...
H4Mm3r Posted October 15, 2015 Group: Members Topic Count: 8 Topics Per Day: 0.00 Content Count: 24 Reputation: 1 Joined: 09/22/15 Last Seen: November 8, 2015 Author Share 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 Link to comment Share on other sites More sharing options...
H4Mm3r Posted October 14, 2015 Group: Members Topic Count: 8 Topics Per Day: 0.00 Content Count: 24 Reputation: 1 Joined: 09/22/15 Last Seen: November 8, 2015 Author Share Posted October 14, 2015 Hi ! No idea ? Regards. Quote Link to comment Share on other sites More sharing options...
Stolao Posted October 14, 2015 Group: Developer Topic Count: 48 Topics Per Day: 0.01 Content Count: 1443 Reputation: 344 Joined: 10/17/12 Last Seen: Friday at 09:49 PM Share 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 Link to comment Share on other sites More sharing options...
H4Mm3r Posted October 14, 2015 Group: Members Topic Count: 8 Topics Per Day: 0.00 Content Count: 24 Reputation: 1 Joined: 09/22/15 Last Seen: November 8, 2015 Author Share 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 Link to comment Share on other sites More sharing options...
benching Posted October 14, 2015 Group: Members Topic Count: 26 Topics Per Day: 0.01 Content Count: 350 Reputation: 43 Joined: 09/07/12 Last Seen: August 30, 2019 Share 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 Link to comment Share on other sites More sharing options...
Stolao Posted October 14, 2015 Group: Developer Topic Count: 48 Topics Per Day: 0.01 Content Count: 1443 Reputation: 344 Joined: 10/17/12 Last Seen: Friday at 09:49 PM Share 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 Link to comment Share on other sites More sharing options...
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 H4Mm3rLink to comment
Share on other sites
6 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.