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
|
- Id: 192
|
||||||
Name: NPC_MAGICALATTACK
|
Name: NPC_MAGICALATTACK
|
||||||
Description: Demon Shock Attack
|
Description: Demon Shock Attack
|
||||||
MaxLevel: 10
|
MaxLevel: 1
|
||||||
Type: Weapon
|
Type: Magic
|
||||||
TargetType: Attack
|
TargetType: Attack
|
||||||
Flags:
|
Flags:
|
||||||
IsNpc: true
|
IsNpc: true
|
||||||
@ -5912,34 +5912,13 @@ Body:
|
|||||||
Name: NPC_KEEPING
|
Name: NPC_KEEPING
|
||||||
Description: Keeping
|
Description: Keeping
|
||||||
MaxLevel: 1
|
MaxLevel: 1
|
||||||
Type: Weapon
|
|
||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Flags:
|
Flags:
|
||||||
IsNpc: true
|
IsNpc: true
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1:
|
Duration1: 30000
|
||||||
- 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
|
|
||||||
Status: Keeping
|
Status: Keeping
|
||||||
- Id: 202
|
- Id: 202
|
||||||
Name: NPC_DARKBREATH
|
Name: NPC_DARKBREATH
|
||||||
@ -5979,60 +5958,19 @@ Body:
|
|||||||
Flags:
|
Flags:
|
||||||
IsNpc: true
|
IsNpc: true
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1:
|
Duration1: 15000
|
||||||
- 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
|
|
||||||
Status: Barrier
|
Status: Barrier
|
||||||
- Id: 205
|
- Id: 205
|
||||||
Name: NPC_DEFENDER
|
Name: NPC_DEFENDER
|
||||||
Description: Defender
|
Description: Defender
|
||||||
MaxLevel: 1
|
MaxLevel: 1
|
||||||
Type: Weapon
|
|
||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Flags:
|
Flags:
|
||||||
IsNpc: true
|
IsNpc: true
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1:
|
Duration1: 15000
|
||||||
- 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
|
|
||||||
Status: Armor
|
Status: Armor
|
||||||
- Id: 206
|
- Id: 206
|
||||||
Name: NPC_LICK
|
Name: NPC_LICK
|
||||||
@ -9398,8 +9336,7 @@ Body:
|
|||||||
- Id: 349
|
- Id: 349
|
||||||
Name: NPC_POWERUP
|
Name: NPC_POWERUP
|
||||||
Description: Power Up
|
Description: Power Up
|
||||||
MaxLevel: 10
|
MaxLevel: 5
|
||||||
Type: Weapon
|
|
||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
@ -9421,7 +9358,7 @@ Body:
|
|||||||
- Id: 350
|
- Id: 350
|
||||||
Name: NPC_AGIUP
|
Name: NPC_AGIUP
|
||||||
Description: Agility UP
|
Description: Agility UP
|
||||||
MaxLevel: 10
|
MaxLevel: 5
|
||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
@ -1130,6 +1130,8 @@ Body:
|
|||||||
Watk_Element: true
|
Watk_Element: true
|
||||||
- Status: Armor
|
- Status: Armor
|
||||||
DurationLookup: NPC_DEFENDER
|
DurationLookup: NPC_DEFENDER
|
||||||
|
CalcFlags:
|
||||||
|
Speed: true
|
||||||
- Status: Armor_Element_Water
|
- Status: Armor_Element_Water
|
||||||
Icon: EFST_RESIST_PROPERTY_WATER
|
Icon: EFST_RESIST_PROPERTY_WATER
|
||||||
CalcFlags:
|
CalcFlags:
|
||||||
|
@ -6076,8 +6076,8 @@ Body:
|
|||||||
- Id: 192
|
- Id: 192
|
||||||
Name: NPC_MAGICALATTACK
|
Name: NPC_MAGICALATTACK
|
||||||
Description: Demon Shock Attack
|
Description: Demon Shock Attack
|
||||||
MaxLevel: 10
|
MaxLevel: 1
|
||||||
Type: Weapon
|
Type: Magic
|
||||||
TargetType: Attack
|
TargetType: Attack
|
||||||
Flags:
|
Flags:
|
||||||
IsNpc: true
|
IsNpc: true
|
||||||
@ -6183,34 +6183,13 @@ Body:
|
|||||||
Name: NPC_KEEPING
|
Name: NPC_KEEPING
|
||||||
Description: Keeping
|
Description: Keeping
|
||||||
MaxLevel: 1
|
MaxLevel: 1
|
||||||
Type: Weapon
|
|
||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Flags:
|
Flags:
|
||||||
IsNpc: true
|
IsNpc: true
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1:
|
Duration1: 30000
|
||||||
- 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
|
|
||||||
Status: Keeping
|
Status: Keeping
|
||||||
- Id: 202
|
- Id: 202
|
||||||
Name: NPC_DARKBREATH
|
Name: NPC_DARKBREATH
|
||||||
@ -6250,60 +6229,19 @@ Body:
|
|||||||
Flags:
|
Flags:
|
||||||
IsNpc: true
|
IsNpc: true
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1:
|
Duration1: 15000
|
||||||
- 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
|
|
||||||
Status: Barrier
|
Status: Barrier
|
||||||
- Id: 205
|
- Id: 205
|
||||||
Name: NPC_DEFENDER
|
Name: NPC_DEFENDER
|
||||||
Description: Defender
|
Description: Defender
|
||||||
MaxLevel: 1
|
MaxLevel: 1
|
||||||
Type: Weapon
|
|
||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Flags:
|
Flags:
|
||||||
IsNpc: true
|
IsNpc: true
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1:
|
Duration1: 15000
|
||||||
- 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
|
|
||||||
Status: Armor
|
Status: Armor
|
||||||
- Id: 206
|
- Id: 206
|
||||||
Name: NPC_LICK
|
Name: NPC_LICK
|
||||||
@ -9708,8 +9646,7 @@ Body:
|
|||||||
- Id: 349
|
- Id: 349
|
||||||
Name: NPC_POWERUP
|
Name: NPC_POWERUP
|
||||||
Description: Power Up
|
Description: Power Up
|
||||||
MaxLevel: 10
|
MaxLevel: 5
|
||||||
Type: Weapon
|
|
||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
@ -9731,7 +9668,7 @@ Body:
|
|||||||
- Id: 350
|
- Id: 350
|
||||||
Name: NPC_AGIUP
|
Name: NPC_AGIUP
|
||||||
Description: Agility UP
|
Description: Agility UP
|
||||||
MaxLevel: 10
|
MaxLevel: 5
|
||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
@ -1148,6 +1148,8 @@ Body:
|
|||||||
Watk_Element: true
|
Watk_Element: true
|
||||||
- Status: Armor
|
- Status: Armor
|
||||||
DurationLookup: NPC_DEFENDER
|
DurationLookup: NPC_DEFENDER
|
||||||
|
CalcFlags:
|
||||||
|
Speed: true
|
||||||
- Status: Armor_Element_Water
|
- Status: Armor_Element_Water
|
||||||
Icon: EFST_RESIST_PROPERTY_WATER
|
Icon: EFST_RESIST_PROPERTY_WATER
|
||||||
CalcFlags:
|
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
|
if((sce=tsc->getSCE(SC_ARMOR)) && //NPC_DEFENDER
|
||||||
sce->val3&flag && sce->val4&flag)
|
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 ||
|
if( tsc->getSCE(SC_ENERGYCOAT) && (skill_id == GN_HELLS_PLANT_ATK ||
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
@ -2932,10 +2932,9 @@ static bool is_attack_critical(struct Damage* wd, struct block_list *src, struct
|
|||||||
if (!first_call)
|
if (!first_call)
|
||||||
return (wd->type == DMG_CRITICAL || wd->type == DMG_MULTI_HIT_CRITICAL);
|
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
|
if (skill_id == NPC_CRITICALSLASH || skill_id == LG_PINPOINTATTACK) //Always critical skills
|
||||||
return true;
|
return true;
|
||||||
#endif
|
|
||||||
if( skill_id && !skill_get_nk(skill_id,NK_CRITICAL) )
|
if( skill_id && !skill_get_nk(skill_id,NK_CRITICAL) )
|
||||||
return false;
|
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)
|
static bool battle_skill_stacks_masteries_vvs(uint16 skill_id, int type)
|
||||||
{
|
{
|
||||||
switch (skill_id) {
|
switch (skill_id) {
|
||||||
|
// PC skills that are unaffected
|
||||||
case PA_SHIELDCHAIN:
|
case PA_SHIELDCHAIN:
|
||||||
case CR_SHIELDBOOMERANG:
|
case CR_SHIELDBOOMERANG:
|
||||||
case AM_ACIDTERROR:
|
case AM_ACIDTERROR:
|
||||||
case MO_INVESTIGATE:
|
case MO_INVESTIGATE:
|
||||||
case MO_EXTREMITYFIST:
|
case MO_EXTREMITYFIST:
|
||||||
case PA_SACRIFICE:
|
case PA_SACRIFICE:
|
||||||
case NPC_DRAGONBREATH:
|
|
||||||
case RK_DRAGONBREATH:
|
case RK_DRAGONBREATH:
|
||||||
case RK_DRAGONBREATH_WATER:
|
case RK_DRAGONBREATH_WATER:
|
||||||
case NC_SELFDESTRUCTION:
|
case NC_SELFDESTRUCTION:
|
||||||
case LG_SHIELDPRESS:
|
case LG_SHIELDPRESS:
|
||||||
case LG_EARTHDRIVE:
|
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;
|
return false;
|
||||||
case CR_GRANDCROSS:
|
case CR_GRANDCROSS:
|
||||||
case NPC_GRANDDARKNESS:
|
case NPC_GRANDDARKNESS:
|
||||||
|
@ -6200,7 +6200,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case NPC_MAGICALATTACK:
|
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));
|
sc_start(src,src,SC_MAGICALATTACK,100,skill_lv,skill_get_time(skill_id,skill_lv));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -8081,6 +8081,8 @@ static unsigned short status_calc_speed(struct block_list *bl, status_change *sc
|
|||||||
speed = 200;
|
speed = 200;
|
||||||
if( sc->getSCE(SC_DEFENDER) )
|
if( sc->getSCE(SC_DEFENDER) )
|
||||||
speed = max(speed, 200);
|
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
|
if( sc->getSCE(SC_WALKSPEED) && sc->getSCE(SC_WALKSPEED)->val1 > 0 ) // ChangeSpeed
|
||||||
speed = speed * 100 / sc->getSCE(SC_WALKSPEED)->val1;
|
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;
|
break;
|
||||||
case SC_ARMOR:
|
case SC_ARMOR:
|
||||||
// NPC_DEFENDER:
|
// NPC_DEFENDER:
|
||||||
val2 = 80; // Damage reduction
|
val2 = 8; // Damage will be divided by this value
|
||||||
// Attack requirements to be blocked:
|
// Attack requirements to be blocked:
|
||||||
val3 = BF_LONG; // Range
|
val3 = BF_LONG; // Range
|
||||||
val4 = BF_WEAPON|BF_MISC; // Type
|
val4 = BF_WEAPON|BF_MISC; // Type
|
||||||
|
Loading…
x
Reference in New Issue
Block a user