Resolved a flag overlap for status_change_clear_buffs
* Small follow up to 894d6f2. * Resolves Chemical Protection flag coinciding with the Lux Anima flag. * Changed all bitmask values to readable constants.
This commit is contained in:
parent
486495cab8
commit
2305a66101
@ -5396,7 +5396,7 @@ Flags (bitmask):
|
||||
8 : Remove when player logs out.
|
||||
16 : Removeable by Banishing Buster.
|
||||
32 : Removable by Refresh.
|
||||
64 : Removable by Luxanima.
|
||||
64 : Removable by Lux Anima.
|
||||
128 : Remove when Madogear is activated or deactivated.
|
||||
256 : Remove when receive damage.
|
||||
512 : Script is permanent, cannot be cleared by bonus_script_clear.
|
||||
|
@ -8398,7 +8398,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
sc_start(src,bl,SC_INCMATKRATE,100,-50,skill_get_time2(skill_id,skill_lv));
|
||||
break;
|
||||
case 2: // all buffs removed
|
||||
status_change_clear_buffs(bl,9);
|
||||
status_change_clear_buffs(bl, SCCB_BUFFS|SCCB_CHEM_PROTECT);
|
||||
break;
|
||||
case 3: // 1000 damage, random armor destroyed
|
||||
{
|
||||
@ -8850,7 +8850,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
clif_skill_nodamage(src,bl,skill_id,skill_lv,
|
||||
sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
|
||||
status_heal(bl,heal,0,1);
|
||||
status_change_clear_buffs(bl,4);
|
||||
status_change_clear_buffs(bl, SCCB_REFRESH);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -8921,7 +8921,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
}
|
||||
} else if( skill_area_temp[5]&0x20 ) {
|
||||
i = status_get_max_hp(bl) * 25 / 100;
|
||||
status_change_clear_buffs(bl,4);
|
||||
status_change_clear_buffs(bl, SCCB_REFRESH);
|
||||
skill_area_temp[5] &= ~0x20;
|
||||
status_heal(bl,i,0,1);
|
||||
type = SC_REFRESH;
|
||||
@ -13151,7 +13151,7 @@ static int skill_unit_onplace(struct skill_unit *unit, struct block_list *bl, un
|
||||
|
||||
case UNT_HERMODE:
|
||||
if (sg->src_id!=bl->id && battle_check_target(&unit->bl,bl,BCT_PARTY|BCT_GUILD) > 0)
|
||||
status_change_clear_buffs(bl,1); //Should dispell only allies.
|
||||
status_change_clear_buffs(bl, SCCB_BUFFS); //Should dispell only allies.
|
||||
case UNT_RICHMANKIM:
|
||||
case UNT_ETERNALCHAOS:
|
||||
case UNT_DRUMBATTLEFIELD:
|
||||
@ -13682,7 +13682,7 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns
|
||||
status_heal(bl,heal,0,0);
|
||||
break;
|
||||
case 1: // End all negative status
|
||||
status_change_clear_buffs(bl,6);
|
||||
status_change_clear_buffs(bl, SCCB_DEBUFFS|SCCB_REFRESH);
|
||||
if (tsd) clif_gospel_info(tsd, 0x15);
|
||||
break;
|
||||
case 2: // Immunity to all status
|
||||
|
@ -9245,7 +9245,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
if(val4 == BCT_SELF) { // Self effect
|
||||
val2 = tick/10000;
|
||||
tick_time = 10000; // [GodLesZ] tick time
|
||||
status_change_clear_buffs(bl,11); // Remove buffs/debuffs
|
||||
status_change_clear_buffs(bl, SCCB_BUFFS|SCCB_DEBUFFS|SCCB_CHEM_PROTECT); // Remove buffs/debuffs
|
||||
}
|
||||
break;
|
||||
|
||||
@ -9996,7 +9996,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
val3 = status_get_lv(bl) / 10 + val2 / 5; //All stat bonus
|
||||
val4 = tick / 5000;
|
||||
tick_time = 5000; // [GodLesZ] tick time
|
||||
status_change_clear_buffs(bl,3); // Remove buffs/debuffs
|
||||
status_change_clear_buffs(bl, SCCB_BUFFS|SCCB_DEBUFFS); // Remove buffs/debuffs
|
||||
break;
|
||||
case SC_CRESCENTELBOW:
|
||||
val2 = (sd?sd->status.job_level:50) / 2 + (50 + 5 * val1);
|
||||
@ -12837,12 +12837,13 @@ int status_change_timer_sub(struct block_list* bl, va_list ap)
|
||||
* Clears buffs/debuffs on an object
|
||||
* @param bl: Object to clear [PC|MOB|HOM|MER|ELEM]
|
||||
* @param type: Type to remove
|
||||
* &1: Clear Buffs
|
||||
* &2: Clear Debuffs
|
||||
* &4: Specific debuffs with a refresh
|
||||
* &8: Clear chemical protection
|
||||
* SCCB_BUFFS: Clear Buffs
|
||||
* SCCB_DEBUFFS: Clear Debuffs
|
||||
* SCCB_REFRESH: Clear specific debuffs through RK_REFRESH
|
||||
* SCCB_CHEM_PROTECT: Clear AM_CP_ARMOR/HELM/SHIELD/WEAPON
|
||||
* SCCB_LUXANIMA: Bonus Script removed through RK_LUXANIMA
|
||||
*/
|
||||
void status_change_clear_buffs (struct block_list* bl, int type)
|
||||
void status_change_clear_buffs(struct block_list* bl, uint8 type)
|
||||
{
|
||||
int i;
|
||||
struct status_change *sc= status_get_sc(bl);
|
||||
@ -12850,7 +12851,7 @@ void status_change_clear_buffs (struct block_list* bl, int type)
|
||||
if (!sc || !sc->count)
|
||||
return;
|
||||
|
||||
if (type&6) // Debuffs
|
||||
if (type&(SCCB_DEBUFFS|SCCB_REFRESH)) // Debuffs
|
||||
for (i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++)
|
||||
status_change_end(bl, (sc_type)i, INVALID_TIMER);
|
||||
|
||||
@ -12965,7 +12966,7 @@ void status_change_clear_buffs (struct block_list* bl, int type)
|
||||
case SC_CP_SHIELD:
|
||||
case SC_CP_ARMOR:
|
||||
case SC_CP_HELM:
|
||||
if(!(type&8))
|
||||
if(!(type&SCCB_CHEM_PROTECT))
|
||||
continue;
|
||||
break;
|
||||
// Debuffs that can be removed.
|
||||
@ -12983,7 +12984,7 @@ void status_change_clear_buffs (struct block_list* bl, int type)
|
||||
case SC_LEECHESEND:
|
||||
case SC_MARSHOFABYSS:
|
||||
case SC_MANDRAGORA:
|
||||
if(!(type&4))
|
||||
if(!(type&SCCB_REFRESH))
|
||||
continue;
|
||||
break;
|
||||
case SC_HALLUCINATION:
|
||||
@ -13005,18 +13006,18 @@ void status_change_clear_buffs (struct block_list* bl, int type)
|
||||
case SC_FEAR:
|
||||
case SC_MAGNETICFIELD:
|
||||
case SC_NETHERWORLD:
|
||||
if (!(type&2))
|
||||
if (!(type&SCCB_DEBUFFS))
|
||||
continue;
|
||||
break;
|
||||
// The rest are buffs that can be removed.
|
||||
case SC_BERSERK:
|
||||
case SC_SATURDAYNIGHTFEVER:
|
||||
if (!(type&1))
|
||||
if (!(type&SCCB_BUFFS))
|
||||
continue;
|
||||
sc->data[i]->val2 = 0;
|
||||
break;
|
||||
default:
|
||||
if (!(type&1))
|
||||
if (!(type&SCCB_BUFFS))
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
@ -13026,10 +13027,10 @@ void status_change_clear_buffs (struct block_list* bl, int type)
|
||||
//Removes bonus_script
|
||||
if (bl->type == BL_PC) {
|
||||
i = 0;
|
||||
if (type&1) i |= BSF_REM_BUFF;
|
||||
if (type&2) i |= BSF_REM_DEBUFF;
|
||||
if (type&4) i |= BSF_REM_ON_REFRESH;
|
||||
if (type&8) i |= BSF_REM_ON_LUXANIMA;
|
||||
if (type&SCCB_BUFFS) i |= BSF_REM_BUFF;
|
||||
if (type&SCCB_DEBUFFS) i |= BSF_REM_DEBUFF;
|
||||
if (type&SCCB_REFRESH) i |= BSF_REM_ON_REFRESH;
|
||||
if (type&SCCB_LUXANIMA) i |= BSF_REM_ON_LUXANIMA;
|
||||
pc_bonus_script_clear(BL_CAST(BL_PC,bl),i);
|
||||
}
|
||||
|
||||
|
@ -1908,6 +1908,15 @@ enum e_status_change_start_flags {
|
||||
SCSTART_NOICON = 0x10, /// Status icon won't be sent to client
|
||||
};
|
||||
|
||||
/// Enum for status_change_clear_buffs
|
||||
enum e_status_change_clear_buffs_flags {
|
||||
SCCB_BUFFS = 0x01,
|
||||
SCCB_DEBUFFS = 0x02,
|
||||
SCCB_REFRESH = 0x04,
|
||||
SCCB_CHEM_PROTECT = 0x08,
|
||||
SCCB_LUXANIMA = 0x10,
|
||||
};
|
||||
|
||||
///Enum for bonus_script's flag [Cydh]
|
||||
enum e_bonus_script_flags {
|
||||
BSF_REM_ON_DEAD = 0x001, ///< Removed when dead
|
||||
@ -2200,7 +2209,7 @@ int kaahi_heal_timer(int tid, unsigned int tick, int id, intptr_t data);
|
||||
int status_change_timer(int tid, unsigned int tick, int id, intptr_t data);
|
||||
int status_change_timer_sub(struct block_list* bl, va_list ap);
|
||||
int status_change_clear(struct block_list* bl, int type);
|
||||
void status_change_clear_buffs(struct block_list* bl, int type);
|
||||
void status_change_clear_buffs(struct block_list* bl, uint8 type);
|
||||
void status_change_clear_onChangeMap(struct block_list *bl, struct status_change *sc);
|
||||
|
||||
#define status_calc_bl(bl, flag) status_calc_bl_(bl, (enum scb_flag)(flag), SCO_NONE)
|
||||
|
Loading…
x
Reference in New Issue
Block a user