summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt5
-rw-r--r--src/map/battle.c2
-rw-r--r--src/map/clif.c27
3 files changed, 27 insertions, 7 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 2f88f4fa1..31ae9c99f 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,11 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2006/06/17
+ * Fixed the party HP packets to send max HP 10000 and scale HP accordingly
+ when the player's HP doesn't fits in the packet's field. Fixes HP bars not
+ correctly displaying the % of life when max HP is above 32k. [Skotlex]
+
2006/06/16
* Fixed option value being reset'ed on login (fixes cart/peco/falcon being
lost) [Skotlex]
diff --git a/src/map/battle.c b/src/map/battle.c
index b7350fbd4..7d474d5ee 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -766,7 +766,7 @@ static struct Damage battle_calc_weapon_attack(
unsigned idef : 1; //Ignore defense
unsigned idef2 : 1; //Ignore defense (left weapon)
unsigned pdef : 2; //Pierces defense (Investigate/Ice Pick)
- unsigned pdef2 : 2; //1: Use def+def2/50, 2: Use def+def2/100
+ unsigned pdef2 : 2; //1: Use def+def2/100, 2: Use def+def2/50
unsigned infdef : 1; //Infinite defense (plants)
unsigned arrow : 1; //Attack is arrow-based
unsigned rh : 1; //Attack considers right hand (wd.damage)
diff --git a/src/map/clif.c b/src/map/clif.c
index 7e3821ee2..7abe50aa3 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -5941,8 +5941,13 @@ int clif_party_hp(struct map_session_data *sd)
WBUFW(buf,0)=0x106;
WBUFL(buf,2)=sd->status.account_id;
- WBUFW(buf,6)=(sd->battle_status.hp > SHRT_MAX)?SHRT_MAX:sd->battle_status.hp;
- WBUFW(buf,8)=(sd->battle_status.max_hp > SHRT_MAX)?SHRT_MAX:sd->battle_status.max_hp;
+ if (sd->battle_status.max_hp > SHRT_MAX) { //To correctly display the %hp bar. [Skotlex]
+ WBUFW(buf,6) = 10000*sd->battle_status.hp/sd->battle_status.max_hp;
+ WBUFW(buf,8) = 10000;
+ } else {
+ WBUFW(buf,6) = sd->battle_status.hp;
+ WBUFW(buf,8) = sd->battle_status.max_hp;
+ }
clif_send(buf,packet_len_table[0x106],&sd->bl,PARTY_AREA_WOS);
return 0;
}
@@ -5956,8 +5961,13 @@ static void clif_hpmeter_single(int fd, struct map_session_data *sd)
WFIFOHEAD(fd,packet_len_table[0x106]);
WFIFOW(fd,0) = 0x106;
WFIFOL(fd,2) = sd->status.account_id;
- WFIFOW(fd,6) = (sd->battle_status.hp > SHRT_MAX) ? SHRT_MAX : sd->battle_status.hp;
- WFIFOW(fd,8) = (sd->battle_status.max_hp > SHRT_MAX) ? SHRT_MAX : sd->battle_status.max_hp;
+ if (sd->battle_status.max_hp > SHRT_MAX) { //To correctly display the %hp bar. [Skotlex]
+ WFIFOW(fd,6) = 10000*sd->battle_status.hp/sd->battle_status.max_hp;
+ WFIFOW(fd,8) = 10000;
+ } else {
+ WFIFOW(fd,6) = sd->battle_status.hp;
+ WFIFOW(fd,8) = sd->battle_status.max_hp;
+ }
WFIFOSET (fd, packet_len_table[0x106]);
}
@@ -5981,8 +5991,13 @@ int clif_hpmeter(struct map_session_data *sd)
WBUFW(buf,0) = 0x106;
WBUFL(buf,2) = sd->status.account_id;
- WBUFW(buf,6) = (sd->battle_status.hp > SHRT_MAX) ? SHRT_MAX : sd->battle_status.hp;
- WBUFW(buf,8) = (sd->battle_status.max_hp > SHRT_MAX) ? SHRT_MAX : sd->battle_status.max_hp;
+ if (sd->battle_status.max_hp > SHRT_MAX) { //To correctly display the %hp bar. [Skotlex]
+ WBUFW(buf,6) = 10000*sd->battle_status.hp/sd->battle_status.max_hp;
+ WBUFW(buf,8) = 10000;
+ } else {
+ WBUFW(buf,6) = sd->battle_status.hp;
+ WBUFW(buf,8) = sd->battle_status.max_hp;
+ }
for (i = 0; i < fd_max; i++) {
if (session[i] && (sd2 = (struct map_session_data*)session[i]->session_data) && sd != sd2 && sd2->state.auth) {
if (sd2->bl.m != sd->bl.m ||