Implement NPC_ALL_STAT_DOWN (#7637)
This commit is contained in:
parent
b3881bd1fc
commit
bee2c27d78
@ -17907,6 +17907,18 @@ Body:
|
||||
NoReiteration: true
|
||||
NoOverlap: true
|
||||
Status: PropertyWalk
|
||||
- Id: 751
|
||||
Name: NPC_ALL_STAT_DOWN
|
||||
Description: Decrease All Stats
|
||||
MaxLevel: 5
|
||||
TargetType: Attack
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Flags:
|
||||
IsNpc: true
|
||||
Range: 9
|
||||
Duration1: 10000
|
||||
Status: ALL_STAT_DOWN
|
||||
- Id: 752
|
||||
Name: NPC_GRADUAL_GRAVITY
|
||||
Description: Increased Gravity
|
||||
|
@ -8556,3 +8556,16 @@ Body:
|
||||
DisplayPc: true
|
||||
NoDispell: true
|
||||
NoClearance: true
|
||||
- Status: ALL_STAT_DOWN
|
||||
Icon: EFST_ALL_STAT_DOWN
|
||||
DurationLookup: NPC_ALL_STAT_DOWN
|
||||
CalcFlags:
|
||||
Str: true
|
||||
Agi: true
|
||||
Vit: true
|
||||
Int: true
|
||||
Dex: true
|
||||
Luk: true
|
||||
Flags:
|
||||
NoDispell: true
|
||||
NoClearance: true
|
||||
|
@ -1873,6 +1873,7 @@
|
||||
export_constant(SC_GOLDENE_TONE);
|
||||
export_constant(SC_TEMPERING);
|
||||
export_constant(SC_GRADUAL_GRAVITY);
|
||||
export_constant(SC_ALL_STAT_DOWN);
|
||||
|
||||
#ifdef RENEWAL
|
||||
export_constant(SC_EXTREMITYFIST2);
|
||||
|
@ -7822,6 +7822,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
break;
|
||||
|
||||
case NPC_ALL_STAT_DOWN:
|
||||
status_change_start(src, bl, type, 10000, skill_lv, 0, 0, 0, skill_get_time(skill_id, skill_lv), SCSTART_NOAVOID|SCSTART_NOTICKDEF|SCSTART_NORATEDEF);
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
|
||||
break;
|
||||
|
||||
#ifdef RENEWAL
|
||||
// EDP also give +25% WATK poison pseudo element to user.
|
||||
case ASC_EDP:
|
||||
|
@ -6412,7 +6412,10 @@ static unsigned short status_calc_str(struct block_list *bl, status_change *sc,
|
||||
str += sc->getSCE(SC_ALMIGHTY)->val1;
|
||||
if (sc->getSCE(SC_ULTIMATECOOK))
|
||||
str += sc->getSCE(SC_ULTIMATECOOK)->val1;
|
||||
if (sc->getSCE(SC_ALL_STAT_DOWN))
|
||||
str -= sc->getSCE(SC_ALL_STAT_DOWN)->val2;
|
||||
|
||||
//TODO: Stat points should be able to be decreased below 0
|
||||
return (unsigned short)cap_value(str,0,USHRT_MAX);
|
||||
}
|
||||
|
||||
@ -6496,7 +6499,10 @@ static unsigned short status_calc_agi(struct block_list *bl, status_change *sc,
|
||||
agi += sc->getSCE(SC_ALMIGHTY)->val1;
|
||||
if (sc->getSCE(SC_ULTIMATECOOK))
|
||||
agi += sc->getSCE(SC_ULTIMATECOOK)->val1;
|
||||
if (sc->getSCE(SC_ALL_STAT_DOWN))
|
||||
agi -= sc->getSCE(SC_ALL_STAT_DOWN)->val2;
|
||||
|
||||
//TODO: Stat points should be able to be decreased below 0
|
||||
return (unsigned short)cap_value(agi,0,USHRT_MAX);
|
||||
}
|
||||
|
||||
@ -6572,7 +6578,10 @@ static unsigned short status_calc_vit(struct block_list *bl, status_change *sc,
|
||||
vit += sc->getSCE(SC_ULTIMATECOOK)->val1;
|
||||
if (sc->getSCE(SC_CUP_OF_BOZA))
|
||||
vit += 10;
|
||||
if (sc->getSCE(SC_ALL_STAT_DOWN))
|
||||
vit -= sc->getSCE(SC_ALL_STAT_DOWN)->val2;
|
||||
|
||||
//TODO: Stat points should be able to be decreased below 0
|
||||
return (unsigned short)cap_value(vit,0,USHRT_MAX);
|
||||
}
|
||||
|
||||
@ -6661,7 +6670,10 @@ static unsigned short status_calc_int(struct block_list *bl, status_change *sc,
|
||||
int_ += sc->getSCE(SC_ALMIGHTY)->val1;
|
||||
if (sc->getSCE(SC_ULTIMATECOOK))
|
||||
int_ += sc->getSCE(SC_ULTIMATECOOK)->val1;
|
||||
if (sc->getSCE(SC_ALL_STAT_DOWN))
|
||||
int_ -= sc->getSCE(SC_ALL_STAT_DOWN)->val2;
|
||||
|
||||
//TODO: Stat points should be able to be decreased below 0
|
||||
return (unsigned short)cap_value(int_,0,USHRT_MAX);
|
||||
}
|
||||
|
||||
@ -6747,7 +6759,10 @@ static unsigned short status_calc_dex(struct block_list *bl, status_change *sc,
|
||||
dex += sc->getSCE(SC_ALMIGHTY)->val1;
|
||||
if (sc->getSCE(SC_ULTIMATECOOK))
|
||||
dex += sc->getSCE(SC_ULTIMATECOOK)->val1;
|
||||
if (sc->getSCE(SC_ALL_STAT_DOWN))
|
||||
dex -= sc->getSCE(SC_ALL_STAT_DOWN)->val2;
|
||||
|
||||
//TODO: Stat points should be able to be decreased below 0
|
||||
return (unsigned short)cap_value(dex,0,USHRT_MAX);
|
||||
}
|
||||
|
||||
@ -6821,7 +6836,10 @@ static unsigned short status_calc_luk(struct block_list *bl, status_change *sc,
|
||||
luk += sc->getSCE(SC_ULTIMATECOOK)->val1;
|
||||
if (sc->getSCE(SC_MYSTICPOWDER))
|
||||
luk += 10;
|
||||
if (sc->getSCE(SC_ALL_STAT_DOWN))
|
||||
luk -= sc->getSCE(SC_ALL_STAT_DOWN)->val2;
|
||||
|
||||
//TODO: Stat points should be able to be decreased below 0
|
||||
return (unsigned short)cap_value(luk,0,USHRT_MAX);
|
||||
}
|
||||
|
||||
@ -10895,6 +10913,12 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
tick_time = status_get_sc_interval(type);
|
||||
val4 = tick - tick_time; // Remaining time
|
||||
break;
|
||||
case SC_ALL_STAT_DOWN:
|
||||
val2 = 20 * val1;
|
||||
if( val1 < skill_get_max( NPC_ALL_STAT_DOWN ) ){
|
||||
val2 -= 10;
|
||||
}
|
||||
break;
|
||||
case SC_BOSSMAPINFO:
|
||||
if( sd != NULL ) {
|
||||
struct mob_data *boss_md = map_getmob_boss(bl->m); // Search for Boss on this Map
|
||||
|
@ -1264,6 +1264,7 @@ enum sc_type : int16 {
|
||||
SC_TEMPERING,
|
||||
|
||||
SC_GRADUAL_GRAVITY,
|
||||
SC_ALL_STAT_DOWN,
|
||||
|
||||
#ifdef RENEWAL
|
||||
SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
|
||||
|
Loading…
x
Reference in New Issue
Block a user