summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpanikon <panikon@zoho.com>2014-03-13 15:49:56 -0300
committerpanikon <panikon@zoho.com>2014-03-13 15:49:56 -0300
commit1849d357210bc3d01be99e1a7cd5e8c19e5d53f4 (patch)
treee06931b65b3c63dc3ddf2a635cf6c638bda31bc7
parentcc0127618746e7b290fa03a68640cda4d5d1d7e3 (diff)
downloadhercules-1849d357210bc3d01be99e1a7cd5e8c19e5d53f4.tar.gz
hercules-1849d357210bc3d01be99e1a7cd5e8c19e5d53f4.tar.bz2
hercules-1849d357210bc3d01be99e1a7cd5e8c19e5d53f4.tar.xz
hercules-1849d357210bc3d01be99e1a7cd5e8c19e5d53f4.zip
Corrected itemheal documentation, it was fairly wrong.
Added simple overflow check in pc_heal to fix issue: 8082 http://hercules.ws/board/tracker/issue-8082-itemheal-kills-with-high-rand-value/
-rw-r--r--doc/script_commands.txt21
-rw-r--r--src/map/pc.c14
2 files changed, 24 insertions, 11 deletions
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index db2b2ec5a..ada57d783 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -4141,17 +4141,26 @@ character and produces no other output whatsoever.
*itemheal <hp>,<sp>;
-This command heals given absolute amounts of HP and/or SP on the invoking
+This command heals given relative amounts of HP and/or SP on the invoking
character. Unlike heal, this command is intended for use in item scripts.
-It applies potion-related bonuses, such as alchemist ranking, cards and
-status changes. When used inside an NPC script, certain bonuses are
-omitted.
+It applies potion-related bonuses, such as alchemist ranking, cards,
+status changes.
+It also applies a sp/vit-related bonus that is calculated by:
+ heal = heal*[(100+STATUS*2)/100]
+So if a player has 99 vit and the script is 'itemheal 5,0':
+ heal(hp) = 5*[(100+99*2)/100]
+ heal(hp) = 14,9
+ heal(hp) = 14
+ heal(sp) = 0
+
+When used inside an NPC script, potion-related bonuses are omitted.
There is also a nice example on using this with the 'rand' function, to
give you a random amount of healing.
- // This will heal anything thing from 100 to 150 HP and no SP
- itemheal rand(100,150),0;
+ // If the player has 50 vit and no bonuses this will heal
+ // anything from 200 to 300 HP and 5 SP
+ itemheal rand(100,150),5;
---------------------------------------
diff --git a/src/map/pc.c b/src/map/pc.c
index 5eb682415..41a722dfb 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -7521,7 +7521,7 @@ void pc_heal(struct map_session_data *sd,unsigned int hp,unsigned int sp, int ty
*------------------------------------------*/
int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp)
{
- int bonus;
+ int bonus, tmp;
if(hp) {
int i;
@@ -7541,8 +7541,10 @@ int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp)
break;
}
}
- if(bonus!=100)
- hp = hp * bonus / 100;
+
+ tmp = hp*bonus/100;
+ if(bonus != 100 && tmp > hp)
+ hp = tmp;
// Recovery Potion
if( sd->sc.data[SC_HEALPLUS] )
@@ -7554,8 +7556,10 @@ int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp)
+ pc->checkskill(sd,AM_LEARNINGPOTION)*5;
if (script->potion_flag > 1)
bonus += bonus*(script->potion_flag-1)*50/100;
- if(bonus != 100)
- sp = sp * bonus / 100;
+
+ tmp = sp*bonus/100;
+ if(bonus != 100 && tmp > sp)
+ sp = tmp;
}
if( sd->sc.count ) {
if ( sd->sc.data[SC_CRITICALWOUND] ) {