Various NPC skill fixes (#8233)
- Fixed the damage type of various NPC skills - NPC_*BREATH skills and NPC_VAMPIRE_GIFT will now no longer be influenced by ATKpercent - Fixed NPC_CRITICALSLASH not working in pre-re - NPC_KEEPING now lasts 30s - NPC_BARRIER now lasts 15s - NPC_DEFENDER now lasts 15s, reduces damage by 87.5% and halves movement speed - Fixes #3538
This commit is contained in:
parent
100b590094
commit
03f07ab8c7
@ -5805,8 +5805,8 @@ Body:
|
||||
- Id: 192
|
||||
Name: NPC_MAGICALATTACK
|
||||
Description: Demon Shock Attack
|
||||
MaxLevel: 10
|
||||
Type: Weapon
|
||||
MaxLevel: 1
|
||||
Type: Magic
|
||||
TargetType: Attack
|
||||
Flags:
|
||||
IsNpc: true
|
||||
@ -5912,34 +5912,13 @@ Body:
|
||||
Name: NPC_KEEPING
|
||||
Description: Keeping
|
||||
MaxLevel: 1
|
||||
Type: Weapon
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Flags:
|
||||
IsNpc: true
|
||||
HitCount: 1
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
- Level: 2
|
||||
Time: 70000
|
||||
- Level: 3
|
||||
Time: 80000
|
||||
- Level: 4
|
||||
Time: 90000
|
||||
- Level: 5
|
||||
Time: 100000
|
||||
- Level: 6
|
||||
Time: 110000
|
||||
- Level: 7
|
||||
Time: 120000
|
||||
- Level: 8
|
||||
Time: 130000
|
||||
- Level: 9
|
||||
Time: 140000
|
||||
- Level: 10
|
||||
Time: 150000
|
||||
Duration1: 30000
|
||||
Status: Keeping
|
||||
- Id: 202
|
||||
Name: NPC_DARKBREATH
|
||||
@ -5979,60 +5958,19 @@ Body:
|
||||
Flags:
|
||||
IsNpc: true
|
||||
HitCount: 1
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
- Level: 2
|
||||
Time: 70000
|
||||
- Level: 3
|
||||
Time: 80000
|
||||
- Level: 4
|
||||
Time: 90000
|
||||
- Level: 5
|
||||
Time: 100000
|
||||
- Level: 6
|
||||
Time: 110000
|
||||
- Level: 7
|
||||
Time: 120000
|
||||
- Level: 8
|
||||
Time: 130000
|
||||
- Level: 9
|
||||
Time: 140000
|
||||
- Level: 10
|
||||
Time: 150000
|
||||
Duration1: 15000
|
||||
Status: Barrier
|
||||
- Id: 205
|
||||
Name: NPC_DEFENDER
|
||||
Description: Defender
|
||||
MaxLevel: 1
|
||||
Type: Weapon
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Flags:
|
||||
IsNpc: true
|
||||
HitCount: 1
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
- Level: 2
|
||||
Time: 70000
|
||||
- Level: 3
|
||||
Time: 80000
|
||||
- Level: 4
|
||||
Time: 90000
|
||||
- Level: 5
|
||||
Time: 100000
|
||||
- Level: 6
|
||||
Time: 110000
|
||||
- Level: 7
|
||||
Time: 120000
|
||||
- Level: 8
|
||||
Time: 130000
|
||||
- Level: 9
|
||||
Time: 140000
|
||||
- Level: 10
|
||||
Time: 150000
|
||||
Duration1: 15000
|
||||
Status: Armor
|
||||
- Id: 206
|
||||
Name: NPC_LICK
|
||||
@ -9398,8 +9336,7 @@ Body:
|
||||
- Id: 349
|
||||
Name: NPC_POWERUP
|
||||
Description: Power Up
|
||||
MaxLevel: 10
|
||||
Type: Weapon
|
||||
MaxLevel: 5
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
@ -9421,7 +9358,7 @@ Body:
|
||||
- Id: 350
|
||||
Name: NPC_AGIUP
|
||||
Description: Agility UP
|
||||
MaxLevel: 10
|
||||
MaxLevel: 5
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
|
@ -1130,6 +1130,8 @@ Body:
|
||||
Watk_Element: true
|
||||
- Status: Armor
|
||||
DurationLookup: NPC_DEFENDER
|
||||
CalcFlags:
|
||||
Speed: true
|
||||
- Status: Armor_Element_Water
|
||||
Icon: EFST_RESIST_PROPERTY_WATER
|
||||
CalcFlags:
|
||||
|
@ -6076,8 +6076,8 @@ Body:
|
||||
- Id: 192
|
||||
Name: NPC_MAGICALATTACK
|
||||
Description: Demon Shock Attack
|
||||
MaxLevel: 10
|
||||
Type: Weapon
|
||||
MaxLevel: 1
|
||||
Type: Magic
|
||||
TargetType: Attack
|
||||
Flags:
|
||||
IsNpc: true
|
||||
@ -6183,34 +6183,13 @@ Body:
|
||||
Name: NPC_KEEPING
|
||||
Description: Keeping
|
||||
MaxLevel: 1
|
||||
Type: Weapon
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Flags:
|
||||
IsNpc: true
|
||||
HitCount: 1
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
- Level: 2
|
||||
Time: 70000
|
||||
- Level: 3
|
||||
Time: 80000
|
||||
- Level: 4
|
||||
Time: 90000
|
||||
- Level: 5
|
||||
Time: 100000
|
||||
- Level: 6
|
||||
Time: 110000
|
||||
- Level: 7
|
||||
Time: 120000
|
||||
- Level: 8
|
||||
Time: 130000
|
||||
- Level: 9
|
||||
Time: 140000
|
||||
- Level: 10
|
||||
Time: 150000
|
||||
Duration1: 30000
|
||||
Status: Keeping
|
||||
- Id: 202
|
||||
Name: NPC_DARKBREATH
|
||||
@ -6250,60 +6229,19 @@ Body:
|
||||
Flags:
|
||||
IsNpc: true
|
||||
HitCount: 1
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
- Level: 2
|
||||
Time: 70000
|
||||
- Level: 3
|
||||
Time: 80000
|
||||
- Level: 4
|
||||
Time: 90000
|
||||
- Level: 5
|
||||
Time: 100000
|
||||
- Level: 6
|
||||
Time: 110000
|
||||
- Level: 7
|
||||
Time: 120000
|
||||
- Level: 8
|
||||
Time: 130000
|
||||
- Level: 9
|
||||
Time: 140000
|
||||
- Level: 10
|
||||
Time: 150000
|
||||
Duration1: 15000
|
||||
Status: Barrier
|
||||
- Id: 205
|
||||
Name: NPC_DEFENDER
|
||||
Description: Defender
|
||||
MaxLevel: 1
|
||||
Type: Weapon
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Flags:
|
||||
IsNpc: true
|
||||
HitCount: 1
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
- Level: 2
|
||||
Time: 70000
|
||||
- Level: 3
|
||||
Time: 80000
|
||||
- Level: 4
|
||||
Time: 90000
|
||||
- Level: 5
|
||||
Time: 100000
|
||||
- Level: 6
|
||||
Time: 110000
|
||||
- Level: 7
|
||||
Time: 120000
|
||||
- Level: 8
|
||||
Time: 130000
|
||||
- Level: 9
|
||||
Time: 140000
|
||||
- Level: 10
|
||||
Time: 150000
|
||||
Duration1: 15000
|
||||
Status: Armor
|
||||
- Id: 206
|
||||
Name: NPC_LICK
|
||||
@ -9708,8 +9646,7 @@ Body:
|
||||
- Id: 349
|
||||
Name: NPC_POWERUP
|
||||
Description: Power Up
|
||||
MaxLevel: 10
|
||||
Type: Weapon
|
||||
MaxLevel: 5
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
@ -9731,7 +9668,7 @@ Body:
|
||||
- Id: 350
|
||||
Name: NPC_AGIUP
|
||||
Description: Agility UP
|
||||
MaxLevel: 10
|
||||
MaxLevel: 5
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
|
@ -1148,6 +1148,8 @@ Body:
|
||||
Watk_Element: true
|
||||
- Status: Armor
|
||||
DurationLookup: NPC_DEFENDER
|
||||
CalcFlags:
|
||||
Speed: true
|
||||
- Status: Armor_Element_Water
|
||||
Icon: EFST_RESIST_PROPERTY_WATER
|
||||
CalcFlags:
|
||||
|
@ -1762,7 +1762,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
|
||||
if((sce=tsc->getSCE(SC_ARMOR)) && //NPC_DEFENDER
|
||||
sce->val3&flag && sce->val4&flag)
|
||||
damage -= damage * tsc->getSCE(SC_ARMOR)->val2 / 100;
|
||||
damage /= tsc->getSCE(SC_ARMOR)->val2;
|
||||
|
||||
if( tsc->getSCE(SC_ENERGYCOAT) && (skill_id == GN_HELLS_PLANT_ATK ||
|
||||
#ifdef RENEWAL
|
||||
@ -2932,10 +2932,9 @@ static bool is_attack_critical(struct Damage* wd, struct block_list *src, struct
|
||||
if (!first_call)
|
||||
return (wd->type == DMG_CRITICAL || wd->type == DMG_MULTI_HIT_CRITICAL);
|
||||
|
||||
#ifdef RENEWAL
|
||||
if (skill_id == NPC_CRITICALSLASH || skill_id == LG_PINPOINTATTACK) //Always critical skills
|
||||
return true;
|
||||
#endif
|
||||
|
||||
if( skill_id && !skill_get_nk(skill_id,NK_CRITICAL) )
|
||||
return false;
|
||||
|
||||
@ -3367,18 +3366,26 @@ static bool attack_ignores_def(struct Damage* wd, struct block_list *src, struct
|
||||
static bool battle_skill_stacks_masteries_vvs(uint16 skill_id, int type)
|
||||
{
|
||||
switch (skill_id) {
|
||||
// PC skills that are unaffected
|
||||
case PA_SHIELDCHAIN:
|
||||
case CR_SHIELDBOOMERANG:
|
||||
case AM_ACIDTERROR:
|
||||
case MO_INVESTIGATE:
|
||||
case MO_EXTREMITYFIST:
|
||||
case PA_SACRIFICE:
|
||||
case NPC_DRAGONBREATH:
|
||||
case RK_DRAGONBREATH:
|
||||
case RK_DRAGONBREATH_WATER:
|
||||
case NC_SELFDESTRUCTION:
|
||||
case LG_SHIELDPRESS:
|
||||
case LG_EARTHDRIVE:
|
||||
// NPC skills that are unaffected
|
||||
case NPC_FIREBREATH:
|
||||
case NPC_ICEBREATH:
|
||||
case NPC_THUNDERBREATH:
|
||||
case NPC_ACIDBREATH:
|
||||
case NPC_DARKNESSBREATH:
|
||||
case NPC_VAMPIRE_GIFT:
|
||||
case NPC_DRAGONBREATH:
|
||||
return false;
|
||||
case CR_GRANDCROSS:
|
||||
case NPC_GRANDDARKNESS:
|
||||
|
@ -6200,7 +6200,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
break;
|
||||
|
||||
case NPC_MAGICALATTACK:
|
||||
skill_attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag);
|
||||
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
|
||||
sc_start(src,src,SC_MAGICALATTACK,100,skill_lv,skill_get_time(skill_id,skill_lv));
|
||||
break;
|
||||
|
||||
|
@ -8081,6 +8081,8 @@ static unsigned short status_calc_speed(struct block_list *bl, status_change *sc
|
||||
speed = 200;
|
||||
if( sc->getSCE(SC_DEFENDER) )
|
||||
speed = max(speed, 200);
|
||||
if (sc->getSCE(SC_ARMOR))
|
||||
speed = max(speed, 200);
|
||||
if( sc->getSCE(SC_WALKSPEED) && sc->getSCE(SC_WALKSPEED)->val1 > 0 ) // ChangeSpeed
|
||||
speed = speed * 100 / sc->getSCE(SC_WALKSPEED)->val1;
|
||||
|
||||
@ -11467,7 +11469,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
break;
|
||||
case SC_ARMOR:
|
||||
// NPC_DEFENDER:
|
||||
val2 = 80; // Damage reduction
|
||||
val2 = 8; // Damage will be divided by this value
|
||||
// Attack requirements to be blocked:
|
||||
val3 = BF_LONG; // Range
|
||||
val4 = BF_WEAPON|BF_MISC; // Type
|
||||
|
Loading…
x
Reference in New Issue
Block a user