diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/map/skill.c | 2 | ||||
-rw-r--r-- | src/map/status.c | 31 | ||||
-rw-r--r-- | src/map/unit.c | 2 |
3 files changed, 26 insertions, 9 deletions
diff --git a/src/map/skill.c b/src/map/skill.c index 3e8ec29f9..63f4af5e4 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -7523,7 +7523,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, int clif_skill_nodamage(src,bl,skillid,skilllv, sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv))); status_heal(bl,heal,0,1); - status_change_clear_buffs(bl,2); + status_change_clear_buffs(bl,6); } break; diff --git a/src/map/status.c b/src/map/status.c index a239be0a1..7a8f576da 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -6397,7 +6397,7 @@ int status_change_start(struct block_list *bl,enum sc_type type,int rate,int val case SC_DEATHHURT: case SC_PYREXIA: case SC_OBLIVIONCURSE: - //case SC_LEECHESEND://Need confirm. If it protects against nearly every Guillotine poison, it should work on this too right? [Rytech] + case SC_LEECHESEND: //08/31/2011 - Class Balance Changes case SC_CRYSTALIZE: case SC_DEEPSLEEP: case SC_MANDRAGORA: @@ -8599,7 +8599,8 @@ int status_change_start(struct block_list *bl,enum sc_type type,int rate,int val break; case SC_SLEEP: case SC_DEEPSLEEP: - opt_flag = 0; + if(type == SC_DEEPSLEEP) + opt_flag = 0; sc->opt1 = OPT1_SLEEP; break; case SC_BURNING: @@ -10567,8 +10568,14 @@ int status_change_clear_buffs(struct block_list *bl, int type) if (type&2) //Debuffs for (i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++) { - status_change_end(bl, (sc_type)i, INVALID_TIMER); + if(sc->data[i]) + status_change_end(bl, (sc_type)i, INVALID_TIMER); } + if(type&6) //Toxins + for (i = SC_TOXIN; i <= SC_LEECHESEND; ++i) { + if (sc->data[i]) + status_change_end(bl, (sc_type)i, INVALID_TIMER); + } for (i = SC_COMMON_MAX+1; i < SC_MAX; i++) { if (!sc->data[i]) @@ -10630,10 +10637,21 @@ int status_change_clear_buffs(struct block_list *bl, int type) continue; //Debuffs that can be removed. - case SC_HALLUCINATION: + case SC_CRYSTALIZE: + case SC_DEEPSLEEP: + case SC_MANDRAGORA: + case SC_MARSHOFABYSS: + if(!(type&6)) + continue; + break; case SC_QUAGMIRE: - case SC_SIGNUMCRUCIS: case SC_DECREASEAGI: + case SC_BURNING: + if(!(type&2)) + continue; + break; + case SC_HALLUCINATION: + case SC_SIGNUMCRUCIS: case SC_SLOWDOWN: case SC_MINDBREAKER: case SC_WINKCHARM: @@ -10646,11 +10664,10 @@ int status_change_clear_buffs(struct block_list *bl, int type) case SC_BITE: case SC_ADORAMUS: case SC_VACUUM_EXTREME: - case SC_BURNING: case SC_FEAR: case SC_MAGNETICFIELD: case SC_NETHERWORLD: - if (!(type&2)) + if (!(type&2) || type == 6) //RK_Refresh is not supposed to remove these continue; break; //The rest are buffs that can be removed. diff --git a/src/map/unit.c b/src/map/unit.c index 5781c3c24..016e8cdd8 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -744,7 +744,7 @@ int unit_warp(struct block_list *bl,short m,short x,short y,clr_type type) case BL_MOB: if (map[bl->m].flag.monster_noteleport && ((TBL_MOB *)bl)->master_id == 0) return 1; - if (m != bl->m && map[m].flag.nobranch && battle_config.mob_warp&4) + if (m != bl->m && map[m].flag.nobranch && battle_config.mob_warp&4 && !(((TBL_MOB *)bl)->master_id)) return 1; break; case BL_PC: |