diff options
author | malufett <malufett.eat.my.binaries@gmail.com> | 2013-02-27 03:07:16 +0800 |
---|---|---|
committer | malufett <malufett.eat.my.binaries@gmail.com> | 2013-02-27 03:07:16 +0800 |
commit | b9c79ceb5bfc86809da1d3b6154da4222cb72734 (patch) | |
tree | 5de73ff59ff725c57a3bc79a23fcc0905e1bb8c8 | |
parent | ad792f41994ce54dc9e45fbdaaf591f38fccecee (diff) | |
download | hercules-b9c79ceb5bfc86809da1d3b6154da4222cb72734.tar.gz hercules-b9c79ceb5bfc86809da1d3b6154da4222cb72734.tar.bz2 hercules-b9c79ceb5bfc86809da1d3b6154da4222cb72734.tar.xz hercules-b9c79ceb5bfc86809da1d3b6154da4222cb72734.zip |
Fixed Bug #7014 and Bug #7077
-where Chorus/Ensemble skill checks are not working properly.
-NJ_SUITON should now work properly with Kagerou/Oboro.
Signed-off-by: malufett <malufett.eat.my.binaries@gmail.com>
-rw-r--r-- | src/map/skill.c | 5 | ||||
-rw-r--r-- | src/map/status.c | 2 | ||||
-rw-r--r-- | src/map/unit.c | 21 |
3 files changed, 12 insertions, 16 deletions
diff --git a/src/map/skill.c b/src/map/skill.c index 6486d0772..8fdc09cb7 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -9227,6 +9227,11 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data) inf &= ~BCT_NEUTRAL; } + if( sd && (inf2&INF2_CHORUS_SKILL) && skill_check_pc_partner(sd, ud->skill_id, &ud->skill_lv, 1, 0) < 1 ) { + clif_skill_fail(sd, ud->skill_id, USESKILL_FAIL_NEED_HELPER, 0); + break; + } + if( ud->skill_id >= SL_SKE && ud->skill_id <= SL_SKA && target->type == BL_MOB ) { if( ((TBL_MOB*)target)->class_ == MOBID_EMPERIUM ) diff --git a/src/map/status.c b/src/map/status.c index cf2c096c9..01f3fda1e 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -7344,7 +7344,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val #endif break; case SC_SUITON: - if (!val2 || (sd && (sd->class_&MAPID_UPPERMASK) == MAPID_NINJA)) { + if (!val2 || (sd && (sd->class_&MAPID_BASEMASK) == MAPID_NINJA)) { //No penalties. val2 = 0; //Agi penalty val3 = 0; //Walk speed penalty diff --git a/src/map/unit.c b/src/map/unit.c index 388c3757d..b1ca64d4c 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1119,6 +1119,12 @@ int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, ui tstatus = status_get_status_data(target); // Record the status of the previous skill) if(sd) { + + if( (skill_get_inf2(skill_id)&INF2_ENSEMBLE_SKILL) && skill_check_pc_partner(sd, skill_id, &skill_lv, 1, 0) < 1 ) { + clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); + return 0; + } + switch(skill_id){ case SA_CASTCANCEL: if(ud->skill_id != skill_id){ @@ -1134,21 +1140,6 @@ int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, ui } sd->skill_id_old = skill_id; break; - case BD_LULLABY: - case BD_RICHMANKIM: - case BD_ETERNALCHAOS: - case BD_DRUMBATTLEFIELD: - case BD_RINGNIBELUNGEN: - case BD_ROKISWEIL: - case BD_INTOABYSS: - case BD_SIEGFRIED: - case CG_MOONLIT: - if (skill_check_pc_partner(sd, skill_id, &skill_lv, 1, 0) < 1) - { - clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); - return 0; - } - break; case WL_WHITEIMPRISON: if( battle_check_target(src,target,BCT_SELF|BCT_ENEMY) < 0 ) { clif_skill_fail(sd,skill_id,USESKILL_FAIL_TOTARGET,0); |