diff options
Diffstat (limited to 'src/map/status.c')
-rw-r--r-- | src/map/status.c | 44 |
1 files changed, 32 insertions, 12 deletions
diff --git a/src/map/status.c b/src/map/status.c index a9c3790d5..4a3a6b0d8 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -6346,8 +6346,8 @@ 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_CRYSTALIZE: + case SC_LEECHESEND: + case SC_CRYSTALIZE: ////08/31/2011 - Class Balance Changes case SC_DEEPSLEEP: case SC_MANDRAGORA: return 0; @@ -8551,8 +8551,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_STONE: sc->opt1 = OPT1_STONEWAIT; break; case SC_FREEZE: sc->opt1 = OPT1_FREEZE; break; case SC_STUN: sc->opt1 = OPT1_STUN; break; - case SC_SLEEP: - case SC_DEEPSLEEP: opt_flag = 0; sc->opt1 = OPT1_SLEEP; break; + case SC_DEEPSLEEP: opt_flag = 0; + case SC_SLEEP: sc->opt1 = OPT1_SLEEP; break; case SC_BURNING: sc->opt1 = OPT1_BURNING; break; // Burning need this to be showed correctly. [pakpil] case SC_WHITEIMPRISON: sc->opt1 = OPT1_IMPRISON; break; case SC_CRYSTALIZE: sc->opt1 = OPT1_CRYSTALIZE; break; @@ -10553,6 +10553,7 @@ int status_change_timer_sub(struct block_list* bl, va_list ap) /*========================================== * Clears buffs/debuffs of a character. * type&1 -> buffs, type&2 -> debuffs + * type&4 -> especific debuffs(implemented with refresh) *------------------------------------------*/ int status_change_clear_buffs (struct block_list* bl, int type) { @@ -10562,11 +10563,14 @@ int status_change_clear_buffs (struct block_list* bl, int type) if (!sc || !sc->count) return 0; - if (type&2) //Debuffs - for( i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++ ) - { - status_change_end(bl, (sc_type)i, INVALID_TIMER); - } + + if (type&6) //Debuffs + for (i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++) + status_change_end(bl, (sc_type)i, INVALID_TIMER); + + for (i = SC_COMMON_MAX+1; i < SC_MAX; i++) { + if (!sc->data[i]) + continue; for( i = SC_COMMON_MAX+1; i < SC_MAX; i++ ) { @@ -10628,7 +10632,24 @@ int status_change_clear_buffs (struct block_list* bl, int type) case SC_CURSEDCIRCLE_TARGET: continue; - //Debuffs that can be removed. + //Debuffs that can be removed. + case SC_DEEPSLEEP: + case SC_BURNING: + case SC_FREEZING: + case SC_CRYSTALIZE: + case SC_TOXIN: + case SC_PARALYSE: + case SC_VENOMBLEED: + case SC_MAGICMUSHROOM: + case SC_DEATHHURT: + case SC_PYREXIA: + case SC_OBLIVIONCURSE: + case SC_LEECHESEND: + case SC_MARSHOFABYSS: + case SC_MANDRAGORA: + if(!(type&4)) + continue; + break; case SC_HALLUCINATION: case SC_QUAGMIRE: case SC_SIGNUMCRUCIS: @@ -10645,14 +10666,13 @@ 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)) continue; break; - //The rest are buffs that can be removed. + //The rest are buffs that can be removed. case SC__BLOODYLUST: case SC_BERSERK: case SC_SATURDAYNIGHTFEVER: |