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.
|
8 : Remove when player logs out.
|
||||||
16 : Removeable by Banishing Buster.
|
16 : Removeable by Banishing Buster.
|
||||||
32 : Removable by Refresh.
|
32 : Removable by Refresh.
|
||||||
64 : Removable by Luxanima.
|
64 : Removable by Lux Anima.
|
||||||
128 : Remove when Madogear is activated or deactivated.
|
128 : Remove when Madogear is activated or deactivated.
|
||||||
256 : Remove when receive damage.
|
256 : Remove when receive damage.
|
||||||
512 : Script is permanent, cannot be cleared by bonus_script_clear.
|
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));
|
sc_start(src,bl,SC_INCMATKRATE,100,-50,skill_get_time2(skill_id,skill_lv));
|
||||||
break;
|
break;
|
||||||
case 2: // all buffs removed
|
case 2: // all buffs removed
|
||||||
status_change_clear_buffs(bl,9);
|
status_change_clear_buffs(bl, SCCB_BUFFS|SCCB_CHEM_PROTECT);
|
||||||
break;
|
break;
|
||||||
case 3: // 1000 damage, random armor destroyed
|
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,
|
clif_skill_nodamage(src,bl,skill_id,skill_lv,
|
||||||
sc_start(src,bl,type,100,skill_lv,skill_get_time(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_heal(bl,heal,0,1);
|
||||||
status_change_clear_buffs(bl,4);
|
status_change_clear_buffs(bl, SCCB_REFRESH);
|
||||||
}
|
}
|
||||||
break;
|
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 ) {
|
} else if( skill_area_temp[5]&0x20 ) {
|
||||||
i = status_get_max_hp(bl) * 25 / 100;
|
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;
|
skill_area_temp[5] &= ~0x20;
|
||||||
status_heal(bl,i,0,1);
|
status_heal(bl,i,0,1);
|
||||||
type = SC_REFRESH;
|
type = SC_REFRESH;
|
||||||
@ -13151,7 +13151,7 @@ static int skill_unit_onplace(struct skill_unit *unit, struct block_list *bl, un
|
|||||||
|
|
||||||
case UNT_HERMODE:
|
case UNT_HERMODE:
|
||||||
if (sg->src_id!=bl->id && battle_check_target(&unit->bl,bl,BCT_PARTY|BCT_GUILD) > 0)
|
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_RICHMANKIM:
|
||||||
case UNT_ETERNALCHAOS:
|
case UNT_ETERNALCHAOS:
|
||||||
case UNT_DRUMBATTLEFIELD:
|
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);
|
status_heal(bl,heal,0,0);
|
||||||
break;
|
break;
|
||||||
case 1: // End all negative status
|
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);
|
if (tsd) clif_gospel_info(tsd, 0x15);
|
||||||
break;
|
break;
|
||||||
case 2: // Immunity to all status
|
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
|
if(val4 == BCT_SELF) { // Self effect
|
||||||
val2 = tick/10000;
|
val2 = tick/10000;
|
||||||
tick_time = 10000; // [GodLesZ] tick time
|
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;
|
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
|
val3 = status_get_lv(bl) / 10 + val2 / 5; //All stat bonus
|
||||||
val4 = tick / 5000;
|
val4 = tick / 5000;
|
||||||
tick_time = 5000; // [GodLesZ] tick time
|
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;
|
break;
|
||||||
case SC_CRESCENTELBOW:
|
case SC_CRESCENTELBOW:
|
||||||
val2 = (sd?sd->status.job_level:50) / 2 + (50 + 5 * val1);
|
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
|
* Clears buffs/debuffs on an object
|
||||||
* @param bl: Object to clear [PC|MOB|HOM|MER|ELEM]
|
* @param bl: Object to clear [PC|MOB|HOM|MER|ELEM]
|
||||||
* @param type: Type to remove
|
* @param type: Type to remove
|
||||||
* &1: Clear Buffs
|
* SCCB_BUFFS: Clear Buffs
|
||||||
* &2: Clear Debuffs
|
* SCCB_DEBUFFS: Clear Debuffs
|
||||||
* &4: Specific debuffs with a refresh
|
* SCCB_REFRESH: Clear specific debuffs through RK_REFRESH
|
||||||
* &8: Clear chemical protection
|
* 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;
|
int i;
|
||||||
struct status_change *sc= status_get_sc(bl);
|
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)
|
if (!sc || !sc->count)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (type&6) // Debuffs
|
if (type&(SCCB_DEBUFFS|SCCB_REFRESH)) // Debuffs
|
||||||
for (i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++)
|
for (i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++)
|
||||||
status_change_end(bl, (sc_type)i, INVALID_TIMER);
|
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_SHIELD:
|
||||||
case SC_CP_ARMOR:
|
case SC_CP_ARMOR:
|
||||||
case SC_CP_HELM:
|
case SC_CP_HELM:
|
||||||
if(!(type&8))
|
if(!(type&SCCB_CHEM_PROTECT))
|
||||||
continue;
|
continue;
|
||||||
break;
|
break;
|
||||||
// Debuffs that can be removed.
|
// 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_LEECHESEND:
|
||||||
case SC_MARSHOFABYSS:
|
case SC_MARSHOFABYSS:
|
||||||
case SC_MANDRAGORA:
|
case SC_MANDRAGORA:
|
||||||
if(!(type&4))
|
if(!(type&SCCB_REFRESH))
|
||||||
continue;
|
continue;
|
||||||
break;
|
break;
|
||||||
case SC_HALLUCINATION:
|
case SC_HALLUCINATION:
|
||||||
@ -13005,18 +13006,18 @@ void status_change_clear_buffs (struct block_list* bl, int type)
|
|||||||
case SC_FEAR:
|
case SC_FEAR:
|
||||||
case SC_MAGNETICFIELD:
|
case SC_MAGNETICFIELD:
|
||||||
case SC_NETHERWORLD:
|
case SC_NETHERWORLD:
|
||||||
if (!(type&2))
|
if (!(type&SCCB_DEBUFFS))
|
||||||
continue;
|
continue;
|
||||||
break;
|
break;
|
||||||
// The rest are buffs that can be removed.
|
// The rest are buffs that can be removed.
|
||||||
case SC_BERSERK:
|
case SC_BERSERK:
|
||||||
case SC_SATURDAYNIGHTFEVER:
|
case SC_SATURDAYNIGHTFEVER:
|
||||||
if (!(type&1))
|
if (!(type&SCCB_BUFFS))
|
||||||
continue;
|
continue;
|
||||||
sc->data[i]->val2 = 0;
|
sc->data[i]->val2 = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (!(type&1))
|
if (!(type&SCCB_BUFFS))
|
||||||
continue;
|
continue;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -13026,10 +13027,10 @@ void status_change_clear_buffs (struct block_list* bl, int type)
|
|||||||
//Removes bonus_script
|
//Removes bonus_script
|
||||||
if (bl->type == BL_PC) {
|
if (bl->type == BL_PC) {
|
||||||
i = 0;
|
i = 0;
|
||||||
if (type&1) i |= BSF_REM_BUFF;
|
if (type&SCCB_BUFFS) i |= BSF_REM_BUFF;
|
||||||
if (type&2) i |= BSF_REM_DEBUFF;
|
if (type&SCCB_DEBUFFS) i |= BSF_REM_DEBUFF;
|
||||||
if (type&4) i |= BSF_REM_ON_REFRESH;
|
if (type&SCCB_REFRESH) i |= BSF_REM_ON_REFRESH;
|
||||||
if (type&8) i |= BSF_REM_ON_LUXANIMA;
|
if (type&SCCB_LUXANIMA) i |= BSF_REM_ON_LUXANIMA;
|
||||||
pc_bonus_script_clear(BL_CAST(BL_PC,bl),i);
|
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
|
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 for bonus_script's flag [Cydh]
|
||||||
enum e_bonus_script_flags {
|
enum e_bonus_script_flags {
|
||||||
BSF_REM_ON_DEAD = 0x001, ///< Removed when dead
|
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(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_timer_sub(struct block_list* bl, va_list ap);
|
||||||
int status_change_clear(struct block_list* bl, int type);
|
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);
|
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)
|
#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