From 3286a16fe958ce6aa85ddb07958aca9e2467efac Mon Sep 17 00:00:00 2001 From: skotlex Date: Mon, 2 Oct 2006 21:36:51 +0000 Subject: - Modified item-granded status resistance reduction to behave as explained by Vicious (Ragnarok Monthly magazine) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@8921 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 2 ++ src/map/pc.c | 6 ++++-- src/map/status.c | 16 +++++++++------- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 1c52e2582..b5132b9e8 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2006/10/02 + * Modified item-granded status resistance reduction to behave as explained + by Vicious (Ragnarok Monthly magazine) [Skotlex] * Added the opt3 values to Eske [Skotlex] * Fixed the txt->sql converter only saving the very first character permanent variable. [Skotlex] diff --git a/src/map/pc.c b/src/map/pc.c index 822581272..2b2037e9b 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1902,8 +1902,10 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) ShowWarning("pc_bonus2 (Resist Effect): %d is not supported.\n", type2); break; } - if(sd->state.lr_flag != 2) - sd->reseff[type2-SC_COMMON_MIN]+=val; + if(sd->state.lr_flag == 2) + break; + i = sd->reseff[type2-SC_COMMON_MIN]+val; + sd->reseff[type2-SC_COMMON_MIN]= cap_value(i, 0, 10000); break; case SP_MAGIC_ADDELE: if(type2 >= ELE_MAX) { diff --git a/src/map/status.c b/src/map/status.c index bdb44c7a4..b5dc06b07 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -4479,13 +4479,15 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val return 0; } - //Item defenses do not reduce duration, so they go out of the function. - if(sd && SC_COMMON_MIN<=type && type<=SC_COMMON_MAX - && sd->reseff[type-SC_COMMON_MIN] > 0) - def += sd->reseff[type-SC_COMMON_MIN]; - - if (def && !(flag&8)) - rate -= rate*def/10000; + if (!(flag&8)) { + if (def) //Natural resistance + rate -= rate*def/10000; + + //Item resistance (only applies to rate%) + if(sd && SC_COMMON_MIN<=type && type<=SC_COMMON_MAX + && sd->reseff[type-SC_COMMON_MIN] > 0) + rate -= rate*sd->reseff[type-SC_COMMON_MIN]/10000; + } if (!(rand()%10000 < rate)) return 0; -- cgit v1.2.3-70-g09d2