diff options
-rw-r--r-- | Changelog-Trunk.txt | 3 | ||||
-rw-r--r-- | src/map/battle.c | 43 | ||||
-rw-r--r-- | src/map/skill.c | 15 |
3 files changed, 29 insertions, 32 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index caba021f2..e575d1bcc 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,9 @@ 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. +09/06/13 + * If both Double Attack and critical attack have chance to trigger within one attack, Double Attack takes priority. (bugreport:3231) [Inkfish] + * Fixed Butterfly Wings not working on maps blocking Teleport. (bugreport:3236) [Inkfish] 09/06/12 * Fixed "arrow_atk" flag never being reset results in arrow consumption on itemskills and autocasts. (bugreport:3233) [Inkfish] * Fixed itemskill not bypassing Silence, SteelBody, Berserk and the like. (bugreport:3232) [Inkfish] diff --git a/src/map/battle.c b/src/map/battle.c index 73bf76ce8..0a6d302c1 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1066,8 +1066,26 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo flag.lh=1; } + if( sd && !skill_num ) + { //Check for double attack. + if( ( ( skill_lv = pc_checkskill(sd,TF_DOUBLE) ) > 0 && sd->weapontype1 == W_DAGGER ) + || ( sd->double_rate > 0 && sd->weapontype1 != W_FIST ) ) //Will fail bare-handed + { //Success chance is not added, the higher one is used [Skotlex] + if( rand()%100 < ( 5*skill_lv > sd->double_rate ? 5*skill_lv : sd->double_rate ) ) + { + wd.div_ = skill_get_num(TF_DOUBLE,skill_lv?skill_lv:1); + wd.type = 0x08; + } + } + else if( sd->weapontype1 == W_REVOLVER && (skill_lv = pc_checkskill(sd,GS_CHAINACTION)) > 0 && rand()%100 < 5*skill_lv ) + { + wd.div_ = skill_get_num(GS_CHAINACTION,skill_lv); + wd.type = 0x08; + } + } + //Check for critical - if(!flag.cri && sstatus->cri && + if( !flag.cri && !(wd.type&0x08) && sstatus->cri && (!skill_num || skill_num == KN_AUTOCOUNTER || skill_num == SN_SHARPSHOOTING || skill_num == MA_SHARPSHOOTING || @@ -2089,29 +2107,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo return wd; } - if(sd && !skill_num && !flag.cri) - { //Check for double attack. - if(((skill_lv = pc_checkskill(sd,TF_DOUBLE)) > 0 && sd->weapontype1 == W_DAGGER) - ||(sd->double_rate > 0 && sd->weapontype1 != W_FIST)) //Will fail bare-handed - { //Success chance is not added, the higher one is used [Skotlex] - if (rand()%100 < (5*skill_lv>sd->double_rate?5*skill_lv:sd->double_rate)) - { - wd.div_=skill_get_num(TF_DOUBLE,skill_lv?skill_lv:1); - damage_div_fix(wd.damage, wd.div_); - wd.type = 0x08; - } - } else - if (sd->weapontype1 == W_REVOLVER && - (skill_lv = pc_checkskill(sd,GS_CHAINACTION)) > 0 && - (rand()%100 < 5*skill_lv) - ) - { - wd.div_=skill_get_num(GS_CHAINACTION,skill_lv); - damage_div_fix(wd.damage, wd.div_); - wd.type = 0x08; - } - } - if (sd) { if (!flag.rh && flag.lh) diff --git a/src/map/skill.c b/src/map/skill.c index 63640656f..bfe20c8c9 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -384,13 +384,12 @@ int skillnotok (int skillid, struct map_session_data *sd) return 1; } return 0; - break; case AL_TELEPORT: - if(map[m].flag.noteleport) { - clif_skill_teleportmessage(sd,0); - return 1; - } - return 0; + // if(map[m].flag.noteleport) { + // clif_skill_teleportmessage(sd,0); + // return 1; + // } + return 0; // gonna be checked in 'skill_castend_nodamage_id' case WE_CALLPARTNER: case WE_CALLPARENT: case WE_CALLBABY: @@ -4388,11 +4387,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case AL_TELEPORT: if(sd) { - if (map[bl->m].flag.noteleport) { + if (map[bl->m].flag.noteleport && skilllv <= 2) { clif_skill_teleportmessage(sd,0); break; } - if(!battle_config.duel_allow_teleport && sd->duel_group) { // duel restriction [LuzZza] + if(!battle_config.duel_allow_teleport && sd->duel_group && skilllv <= 2) { // duel restriction [LuzZza] clif_displaymessage(sd->fd, "Duel: Can't use teleport in duel."); break; } |