diff options
-rw-r--r-- | Changelog-Trunk.txt | 3 | ||||
-rw-r--r-- | src/map/status.c | 24 | ||||
-rw-r--r-- | src/map/unit.c | 26 |
3 files changed, 30 insertions, 23 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index adff332d8..1260b3f70 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,9 @@ 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. 2007/05/20 + * Fixed Chase Walk having a deactivation cast time (should be instant) + * Changed status calc to allow value 0 stats; aegis allows + negative values, but eA is unsigned in this regard, so ... * Added positional music effect to Battle Chant / Gospel - see r10588 on how to disable it if it annoys you ^^; 2007/05/19 diff --git a/src/map/status.c b/src/map/status.c index 81b28abb7..54b6db02e 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -3114,7 +3114,7 @@ void status_calc_bl(struct block_list *bl, unsigned long flag) static unsigned short status_calc_str(struct block_list *bl, struct status_change *sc, int str) { if(!sc || !sc->count) - return cap_value(str,1,USHRT_MAX); + return cap_value(str,0,USHRT_MAX); if(sc->data[SC_INCALLSTATUS].timer!=-1) str += sc->data[SC_INCALLSTATUS].val1; @@ -3147,13 +3147,13 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang if(sc->data[SC_SPIRIT].timer!=-1 && sc->data[SC_SPIRIT].val2 == SL_HIGH && str < 50) str = 50; - return cap_value(str,1,USHRT_MAX); + return cap_value(str,0,USHRT_MAX); } static unsigned short status_calc_agi(struct block_list *bl, struct status_change *sc, int agi) { if(!sc || !sc->count) - return cap_value(agi,1,USHRT_MAX); + return cap_value(agi,0,USHRT_MAX); if(sc->data[SC_CONCENTRATE].timer!=-1 && sc->data[SC_QUAGMIRE].timer == -1) agi += (agi-sc->data[SC_CONCENTRATE].val3)*sc->data[SC_CONCENTRATE].val2/100; @@ -3186,13 +3186,13 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang if(sc->data[SC_SPIRIT].timer!=-1 && sc->data[SC_SPIRIT].val2 == SL_HIGH && agi < 50) agi = 50; - return cap_value(agi,1,USHRT_MAX); + return cap_value(agi,0,USHRT_MAX); } static unsigned short status_calc_vit(struct block_list *bl, struct status_change *sc, int vit) { if(!sc || !sc->count) - return cap_value(vit,1,USHRT_MAX); + return cap_value(vit,0,USHRT_MAX); if(sc->data[SC_INCALLSTATUS].timer!=-1) vit += sc->data[SC_INCALLSTATUS].val1; @@ -3215,13 +3215,13 @@ static unsigned short status_calc_vit(struct block_list *bl, struct status_chang if(sc->data[SC_SPIRIT].timer!=-1 && sc->data[SC_SPIRIT].val2 == SL_HIGH && vit < 50) vit = 50; - return cap_value(vit,1,USHRT_MAX); + return cap_value(vit,0,USHRT_MAX); } static unsigned short status_calc_int(struct block_list *bl, struct status_change *sc, int int_) { if(!sc || !sc->count) - return cap_value(int_,1,USHRT_MAX); + return cap_value(int_,0,USHRT_MAX); if(sc->data[SC_INCALLSTATUS].timer!=-1) int_ += sc->data[SC_INCALLSTATUS].val1; @@ -3252,13 +3252,13 @@ static unsigned short status_calc_int(struct block_list *bl, struct status_chang if(sc->data[SC_SPIRIT].timer!=-1 && sc->data[SC_SPIRIT].val2 == SL_HIGH && int_ < 50) int_ = 50; - return cap_value(int_,1,USHRT_MAX); + return cap_value(int_,0,USHRT_MAX); } static unsigned short status_calc_dex(struct block_list *bl, struct status_change *sc, int dex) { if(!sc || !sc->count) - return cap_value(dex,1,USHRT_MAX); + return cap_value(dex,0,USHRT_MAX); if(sc->data[SC_CONCENTRATE].timer!=-1 && sc->data[SC_QUAGMIRE].timer == -1) dex += (dex-sc->data[SC_CONCENTRATE].val4)*sc->data[SC_CONCENTRATE].val2/100; @@ -3294,13 +3294,13 @@ static unsigned short status_calc_dex(struct block_list *bl, struct status_chang if(sc->data[SC_SPIRIT].timer!=-1 && sc->data[SC_SPIRIT].val2 == SL_HIGH && dex < 50) dex = 50; - return cap_value(dex,1,USHRT_MAX); + return cap_value(dex,0,USHRT_MAX); } static unsigned short status_calc_luk(struct block_list *bl, struct status_change *sc, int luk) { if(!sc || !sc->count) - return cap_value(luk,1,USHRT_MAX); + return cap_value(luk,0,USHRT_MAX); if(sc->data[SC_CURSE].timer!=-1) return 0; @@ -3321,7 +3321,7 @@ static unsigned short status_calc_luk(struct block_list *bl, struct status_chang if(sc->data[SC_SPIRIT].timer!=-1 && sc->data[SC_SPIRIT].val2 == SL_HIGH && luk < 50) luk = 50; - return cap_value(luk,1,USHRT_MAX); + return cap_value(luk,0,USHRT_MAX); } static unsigned short status_calc_batk(struct block_list *bl, struct status_change *sc, int batk) diff --git a/src/map/unit.c b/src/map/unit.c index d3738393e..b1612f986 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -946,35 +946,39 @@ int unit_skilluse_id2(struct block_list *src, int target_id, int skill_num, int switch(skill_num){ case ALL_RESURRECTION: - if(battle_check_undead(tstatus->race,tstatus->def_ele)){ - temp=1; + if(battle_check_undead(tstatus->race,tstatus->def_ele)) { + temp = 1; casttime = skill_castfix(src, PR_TURNUNDEAD, skill_lv); } else if (!status_isdead(target)) return 0; //Can't cast on non-dead characters. - break; + break; case MO_FINGEROFFENSIVE: if(sd) casttime += casttime * ((skill_lv > sd->spiritball)? sd->spiritball:skill_lv); - break; + break; case MO_EXTREMITYFIST: if (sc && sc->data[SC_COMBO].timer != -1 && - (sc->data[SC_COMBO].val1 == MO_COMBOFINISH || + (sc->data[SC_COMBO].val1 == MO_COMBOFINISH || sc->data[SC_COMBO].val1 == CH_TIGERFIST || sc->data[SC_COMBO].val1 == CH_CHAINCRUSH)) casttime = 0; temp = 1; - break; + break; + case SA_SPELLBREAKER: + temp = 1; + break; + case ST_CHASEWALK: + if (sc && sc->data[ST_CHASEWALK].timer != -1) + casttime = 0; + break; case TK_RUN: if (sc && sc->data[SC_RUN].timer != -1) casttime = 0; - break; - case SA_SPELLBREAKER: - temp =1; - break; + break; case KN_CHARGEATK: //Taken from jA: Casttime is increased by dist/3*100% casttime+= casttime * (distance_bl(src,target)-1)/3; - break; + break; } if (!(skill_get_castnodex(skill_num, skill_lv)&2)) |