diff options
author | panikon <panikon@zoho.com> | 2014-03-13 15:49:56 -0300 |
---|---|---|
committer | panikon <panikon@zoho.com> | 2014-03-13 15:49:56 -0300 |
commit | 1849d357210bc3d01be99e1a7cd5e8c19e5d53f4 (patch) | |
tree | e06931b65b3c63dc3ddf2a635cf6c638bda31bc7 | |
parent | cc0127618746e7b290fa03a68640cda4d5d1d7e3 (diff) | |
download | hercules-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.txt | 21 | ||||
-rw-r--r-- | src/map/pc.c | 14 |
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] ) { |