From 0078db6a30bf824afffa9430df97bc7e5c955c83 Mon Sep 17 00:00:00 2001 From: skotlex Date: Tue, 7 Mar 2006 19:59:57 +0000 Subject: [PATCH] - Some overflow protections on calculation of max hp. Now when max hp becomes negative, it is bumped to the server's max_hp setting (it is assumed there was an overflow) git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@5493 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 4 ++++ src/map/status.c | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 45760a47fc..fc5962ac1a 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -5,6 +5,10 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. EV GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS 2006/03/07 + * status_calc_pc now assumes that if your max hp is negative, it has + overflowed, and as such, it is set to the max_hp setting instead of 1. This + 'dangerous' assumptio is alright as long as there aren't equipment that can + send your hp to negative values. [Skotlex] - Fixed the soul linker skill tree. (Thanks to muad_dib) [Zephiris] * Added Gunslinger and Ninja into @job. of course, you need latest EXE for make this work... and of course no skills yet! [Vicious] diff --git a/src/map/status.c b/src/map/status.c index 3e0c844f5f..23a4db4a87 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "pc.h" #include "map.h" @@ -1374,11 +1375,14 @@ int status_calc_pc(struct map_session_data* sd,int first) sd->status.max_hp = sd->status.max_hp * sd->hprate/100; if(battle_config.hp_rate != 100) sd->status.max_hp = sd->status.max_hp * battle_config.hp_rate/100; - - if(sd->status.max_hp > battle_config.max_hp) + + if (sd->status.max_hp < 0) //HP overflow?? sd->status.max_hp = battle_config.max_hp; - else if(sd->status.max_hp <= 0) + else if(sd->status.max_hp > battle_config.max_hp) + sd->status.max_hp = battle_config.max_hp; + else if(sd->status.max_hp == 0) sd->status.max_hp = 1; + if(sd->status.hp>sd->status.max_hp) sd->status.hp=sd->status.max_hp; @@ -5623,7 +5627,8 @@ int status_change_clear_debuffs (struct block_list *bl) static int status_calc_sigma(void) { - int i,j,k; + int i,j; + unsigned int k; for(i=0;i= INT_MAX) + break; //Overflow protection. [Skotlex] } + for(;j<=MAX_LEVEL;j++) + hp_sigma_val[i][j-1] = INT_MAX; } return 0; }