diff --git a/db/pre-re/skill_db.yml b/db/pre-re/skill_db.yml index 4b0bc099eb..803217ab7f 100644 --- a/db/pre-re/skill_db.yml +++ b/db/pre-re/skill_db.yml @@ -175,6 +175,7 @@ Body: Skill: Plagiarism: true Reproduce: true + Duration2: 5000 Requires: SpCost: - Level: 1 @@ -5101,7 +5102,6 @@ Body: Type: Weapon Flags: IsQuest: true - Duration2: 5000 - Id: 146 Name: SM_AUTOBERSERK Description: Auto Berserk @@ -32628,17 +32628,7 @@ Body: Time: 60000 - Level: 5 Time: 30000 - Duration2: - - Level: 1 - Time: 12000 - - Level: 2 - Time: 14000 - - Level: 3 - Time: 16000 - - Level: 4 - Time: 18000 - - Level: 5 - Time: 20000 + Duration2: 30000 Requires: SpCost: 12 Unit: diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 76abbc201a..892075f427 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -175,6 +175,7 @@ Body: Skill: Plagiarism: true Reproduce: true + Duration2: 4500 Requires: SpCost: - Level: 1 @@ -720,27 +721,27 @@ Body: AfterCastActDelay: 500 Duration2: - Level: 1 - Time: 5500 + Time: 3000 - Level: 2 - Time: 8500 + Time: 6000 - Level: 3 - Time: 11500 + Time: 9000 - Level: 4 - Time: 14500 + Time: 12000 - Level: 5 - Time: 17500 + Time: 15000 - Level: 6 - Time: 20500 + Time: 18000 - Level: 7 - Time: 23500 + Time: 21000 - Level: 8 - Time: 26500 + Time: 24000 - Level: 9 - Time: 29500 + Time: 27000 - Level: 10 - Time: 32500 + Time: 30000 - Level: 11 - Time: 32500 + Time: 30000 FixedCastTime: 160 Requires: SpCost: @@ -780,7 +781,7 @@ Body: CastCancel: true CastTime: 800 Duration1: 5000 - Duration2: 20000 + Duration2: 17000 FixedCastTime: 200 Requires: SpCost: @@ -2022,7 +2023,7 @@ Body: Skill: Plagiarism: true Reproduce: true - Duration2: 20000 + Duration2: 18000 Requires: SpCost: 12 Status: Poison @@ -2617,7 +2618,7 @@ Body: HitCount: 1 CastCancel: true AfterCastActDelay: 2000 - Duration2: 20000 + Duration2: 18000 Requires: SpCost: 5 Status: Blind @@ -3217,7 +3218,7 @@ Body: Time: 6000 - Level: 10 Time: 7000 - Duration2: 5000 + Duration2: 4500 Cooldown: 7000 FixedCastTime: - Level: 1 @@ -3432,7 +3433,7 @@ Body: Time: 4500 AfterCastActDelay: 1000 Duration1: 1000 - Duration2: 20000 + Duration2: 18000 Cooldown: 5000 FixedCastTime: - Level: 1 @@ -3664,25 +3665,25 @@ Body: AfterCastActDelay: 200 Duration2: - Level: 1 - Time: 4000 + Time: 1500 - Level: 2 - Time: 5500 + Time: 3000 - Level: 3 - Time: 7000 + Time: 4500 - Level: 4 - Time: 8500 + Time: 6000 - Level: 5 - Time: 10000 + Time: 7500 - Level: 6 - Time: 11500 + Time: 9000 - Level: 7 - Time: 13000 + Time: 10500 - Level: 8 - Time: 14500 + Time: 12000 - Level: 9 - Time: 16000 + Time: 13500 - Level: 10 - Time: 17500 + Time: 15000 FixedCastTime: - Level: 1 Time: 160 @@ -3768,7 +3769,7 @@ Body: Time: 6300 AfterCastActDelay: 1000 Duration1: 4500 - Duration2: 30000 + Duration2: 27000 Cooldown: 6000 FixedCastTime: - Level: 1 @@ -4161,7 +4162,7 @@ Body: Area: 2 - Level: 6 Area: 12 - Duration2: 5000 + Duration2: 4500 Requires: SpCost: 10 Weapon: @@ -4428,7 +4429,7 @@ Body: Time: 80000 - Level: 5 Time: 40000 - Duration2: 5000 + Duration2: 4500 FixedCastTime: 300 Requires: SpCost: 10 @@ -4571,7 +4572,7 @@ Body: Time: 60000 - Level: 5 Time: 30000 - Duration2: 20000 + Duration2: 18000 Requires: SpCost: 12 ItemCost: @@ -4616,7 +4617,7 @@ Body: Time: 60000 - Level: 5 Time: 30000 - Duration2: 20000 + Duration2: 18000 Requires: SpCost: 12 ItemCost: @@ -4669,15 +4670,15 @@ Body: Time: 30000 Duration2: - Level: 1 - Time: 5500 + Time: 3000 - Level: 2 - Time: 8500 + Time: 6000 - Level: 3 - Time: 11500 + Time: 9000 - Level: 4 - Time: 14500 + Time: 12000 - Level: 5 - Time: 17500 + Time: 15000 Requires: SpCost: 10 ItemCost: @@ -5013,7 +5014,7 @@ Body: Hit: Multi_Hit HitCount: -8 Element: Weapon - Duration2: 5000 + Duration2: 4500 Cooldown: 1000 CastDelayFlags: IgnoreStatus: true @@ -5219,7 +5220,7 @@ Body: Time: 45000 - Level: 10 Time: 50000 - Duration2: 20000 + Duration2: 18000 Requires: SpCost: 20 ItemCost: @@ -5364,7 +5365,6 @@ Body: Type: Weapon Flags: IsQuest: true - Duration2: 5000 - Id: 146 Name: SM_AUTOBERSERK Description: Auto Berserk @@ -5433,7 +5433,7 @@ Body: Hit: Single HitCount: 1 Element: Earth - Duration2: 20000 + Duration2: 18000 Requires: SpCost: 9 Status: Blind @@ -5468,7 +5468,6 @@ Body: Requires: SpCost: 2 State: Recover_Weight_Rate - Status: Stun - Id: 152 Name: TF_THROWSTONE Description: Stone Fling @@ -5487,7 +5486,7 @@ Body: Plagiarism: true Reproduce: true AfterCastActDelay: 100 - Duration1: 5000 + Duration1: 4500 Duration2: 20000 Requires: SpCost: 2 @@ -5878,7 +5877,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon - Duration2: 20000 + Duration2: 18000 Status: Poison - Id: 177 Name: NPC_BLINDATTACK @@ -5892,7 +5891,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon - Duration2: 20000 + Duration2: 18000 Status: Blind - Id: 178 Name: NPC_SILENCEATTACK @@ -5906,7 +5905,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon - Duration2: 20000 + Duration2: 18000 Status: Silence - Id: 179 Name: NPC_STUNATTACK @@ -5920,7 +5919,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon - Duration2: 5000 + Duration2: 4500 Status: Stun - Id: 180 Name: NPC_PETRIFYATTACK @@ -5934,7 +5933,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon - Duration2: 20000 + Duration2: 17000 Status: Stone - Id: 181 Name: NPC_CURSEATTACK @@ -5948,7 +5947,7 @@ Body: Hit: Single HitCount: 1 Element: Dark - Duration2: 30000 + Duration2: 28000 Status: Curse - Id: 182 Name: NPC_SLEEPATTACK @@ -5962,7 +5961,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon - Duration2: 30000 + Duration2: 18000 Status: Sleep - Id: 183 Name: NPC_RANDOMATTACK @@ -6320,7 +6319,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon - Duration2: 5000 + Duration2: 4500 Status: Stun - Id: 207 Name: NPC_HALLUCINATION @@ -6393,7 +6392,7 @@ Body: Plagiarism: true Reproduce: true AfterCastActDelay: 500 - Duration1: 5000 + Duration1: 4500 Cooldown: 500 Requires: SpCost: 16 @@ -6841,7 +6840,7 @@ Body: Time: 12 - Level: 5 Time: 13 - Duration2: 120000 + Duration2: 108000 FixedCastTime: 500 Requires: SpCost: 15 @@ -7184,7 +7183,7 @@ Body: Skill: Plagiarism: true Reproduce: true - Duration2: 5000 + Duration2: 4500 Requires: SpCost: 10 State: Shield @@ -7267,7 +7266,7 @@ Body: Skill: Plagiarism: true Reproduce: true - Duration2: 20000 + Duration2: 18000 Requires: SpCost: - Level: 1 @@ -7313,7 +7312,7 @@ Body: AfterCastActDelay: 500 AfterCastWalkDelay: 1000 Duration1: 950 - Duration2: 20000 + Duration2: 18000 Cooldown: 1000 FixedCastTime: 500 Requires: @@ -8953,7 +8952,7 @@ Body: HitCount: 1 SplashArea: -1 AfterCastActDelay: 300 - Duration2: 30000 + Duration2: 27000 Cooldown: 4000 Requires: SpCost: @@ -9210,7 +9209,7 @@ Body: HitCount: 1 SplashArea: -1 AfterCastActDelay: 300 - Duration2: 5000 + Duration2: 4500 Cooldown: 4000 Requires: SpCost: @@ -9517,7 +9516,7 @@ Body: Hit: Multi_Hit HitCount: -2 Element: Dark - Duration2: 20000 + Duration2: 18000 Status: Blind - Id: 339 Name: NPC_GRANDDARKNESS @@ -9536,7 +9535,7 @@ Body: HitCount: 1 Element: Dark AfterCastWalkDelay: 1000 - Duration1: 20000 + Duration1: 18000 Unit: Id: Dummyskill Layout: -1 @@ -11187,7 +11186,7 @@ Body: HitCount: 1 Element: Weapon AfterCastActDelay: 500 - Duration2: 120000 + Duration2: 108000 Requires: SpCost: 23 Status: Bleeding @@ -11267,7 +11266,7 @@ Body: CastCancel: true CastTime: 800 AfterCastActDelay: 500 - Duration2: 20000 + Duration2: 18000 Cooldown: 1000 FixedCastTime: 200 Requires: @@ -11680,7 +11679,7 @@ Body: Hit: Multi_Hit HitCount: -3 Element: Weapon - Duration2: 3000 + Duration2: 2500 Requires: SpCost: - Level: 1 @@ -13051,7 +13050,7 @@ Body: Element: Endowed CastTime: 80 AfterCastActDelay: 500 - Duration1: 2000 + Duration1: 1500 FixedCastTime: 20 Requires: SpCost: @@ -13573,7 +13572,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon - Duration2: 5000 + Duration2: 4500 Requires: SpCost: 15 ZenyCost: @@ -14153,7 +14152,7 @@ Body: HitCount: 1 Element: Weapon AfterCastActDelay: 1000 - Duration2: 5000 + Duration2: 4500 Requires: SpCost: 10 Ammo: @@ -14301,7 +14300,7 @@ Body: Element: Weapon CastTime: 1200 AfterCastActDelay: 500 - Duration2: 120000 + Duration2: 108000 FixedCastTime: 300 Requires: SpCost: @@ -15595,15 +15594,15 @@ Body: Duration1: 100 Duration2: - Level: 1 - Time: 7500 + Time: 5000 - Level: 2 - Time: 12500 + Time: 10000 - Level: 3 - Time: 17500 + Time: 15000 - Level: 4 - Time: 22500 + Time: 20000 - Level: 5 - Time: 27500 + Time: 25000 Cooldown: 300 FixedCastTime: 800 Requires: @@ -16083,7 +16082,7 @@ Body: Element: Water SplashArea: 3 ActiveInstance: 14 - Duration2: 30000 + Duration2: 27000 Status: Freeze - Id: 656 Name: NPC_THUNDERBREATH @@ -16113,7 +16112,7 @@ Body: Element: Poison SplashArea: 3 ActiveInstance: 14 - Duration2: 20000 + Duration2: 18000 Status: Poison - Id: 658 Name: NPC_DARKNESSBREATH @@ -16174,7 +16173,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon - Duration2: 120000 + Duration2: 108000 Status: Bleeding - Id: 661 Name: NPC_PULSESTRIKE @@ -16192,7 +16191,6 @@ Body: HitCount: 1 SplashArea: 7 Knockback: 7 - Status: Bleeding - Id: 662 Name: NPC_HELLJUDGEMENT Description: Hell's Judgement @@ -16208,7 +16206,7 @@ Body: Hit: Single HitCount: 1 SplashArea: 14 - Duration2: 20000 + Duration2: 18000 Status: Curse - Id: 663 Name: NPC_WIDESILENCE @@ -16234,7 +16232,7 @@ Body: Area: 11 - Level: 5 Area: 14 - Duration2: 20000 + Duration2: 18000 Status: Silence - Id: 664 Name: NPC_WIDEFREEZE @@ -16260,7 +16258,7 @@ Body: Area: 11 - Level: 5 Area: 14 - Duration2: 30000 + Duration2: 27000 Status: Freeze - Id: 665 Name: NPC_WIDEBLEEDING @@ -16286,7 +16284,7 @@ Body: Area: 11 - Level: 5 Area: 14 - Duration2: 120000 + Duration2: 108000 Status: Bleeding - Id: 666 Name: NPC_WIDESTONE @@ -16312,7 +16310,7 @@ Body: Area: 11 - Level: 5 Area: 14 - Duration2: 20000 + Duration2: 17000 Status: Stone - Id: 667 Name: NPC_WIDECONFUSE @@ -16338,7 +16336,7 @@ Body: Area: 11 - Level: 5 Area: 14 - Duration2: 30000 + Duration2: 18000 Status: Confusion - Id: 668 Name: NPC_WIDESLEEP @@ -16364,7 +16362,7 @@ Body: Area: 11 - Level: 5 Area: 14 - Duration2: 30000 + Duration2: 18000 Status: Sleep - Id: 669 Name: NPC_WIDESIGHT @@ -16423,7 +16421,7 @@ Body: Time: 11900 - Level: 10 Time: 12900 - Duration2: 20000 + Duration2: 18000 Unit: Id: Evilland Layout: 1 @@ -16631,7 +16629,7 @@ Body: Area: 11 - Level: 5 Area: 14 - Duration2: 20000 + Duration2: 18000 Status: Curse - Id: 678 Name: NPC_WIDESTUN @@ -16657,7 +16655,7 @@ Body: Area: 11 - Level: 5 Area: 14 - Duration2: 5000 + Duration2: 4500 Status: Stun - Id: 679 Name: NPC_VAMPIRE_GIFT @@ -17039,6 +17037,7 @@ Body: Range: 11 Hit: Multi_Hit HitCount: -20 + Duration1: 18000 SplashArea: 9 Knockback: 2 CastCancel: true @@ -17251,15 +17250,15 @@ Body: Area: 9 Duration1: - Level: 1 - Time: 12500 + Time: 10000 - Level: 2 - Time: 17500 + Time: 15000 - Level: 3 - Time: 22500 + Time: 20000 - Level: 4 - Time: 27500 + Time: 25000 - Level: 5 - Time: 32500 + Time: 30000 Status: Freeze - Id: 721 Name: NPC_WIDEWEB @@ -17308,7 +17307,7 @@ Body: HitCount: 1 Element: Water Duration1: 4500 - Duration2: 30000 + Duration2: 27000 Unit: Id: Dummyskill Layout: 5 @@ -17575,7 +17574,7 @@ Body: Element: Fire SplashArea: 3 ActiveInstance: 3 - Duration1: 3000 + Duration1: 2500 Unit: Id: Magma_Eruption Range: 3 @@ -18240,7 +18239,7 @@ Body: SplashArea: 1 Knockback: 5 AfterCastActDelay: 2000 - Duration2: 5000 + Duration2: 4500 Requires: HpCost: 200 SpCost: 40 @@ -18566,7 +18565,6 @@ Body: 2hSword: true 1hSpear: true 2hSpear: true - Status: Fear - Id: 2006 Name: RK_IGNITIONBREAK Description: Ignition Break @@ -18659,7 +18657,7 @@ Body: - Level: 10 Time: 2000 AfterCastActDelay: 2000 - Duration1: 10000 + Duration1: 18000 FixedCastTime: 500 Requires: SpCost: @@ -18933,7 +18931,7 @@ Body: Time: 12000 - Level: 5 Time: 14000 - Duration2: 15000 + Duration2: 18000 Cooldown: 4000 Requires: SpCost: @@ -19234,15 +19232,15 @@ Body: AfterCastActDelay: 2000 Duration1: - Level: 1 - Time: 10000 + Time: 7000 - Level: 2 - Time: 12000 + Time: 9000 - Level: 3 - Time: 14000 + Time: 11000 - Level: 4 - Time: 16000 + Time: 13000 - Level: 5 - Time: 18000 + Time: 15000 Requires: SpCost: - Level: 1 @@ -19376,7 +19374,7 @@ Body: CastCancel: true CastTime: 5000 AfterCastActDelay: 500 - Duration1: 5000 + Duration1: 4500 Cooldown: 5000 FixedCastTime: 1000 Requires: @@ -19423,7 +19421,6 @@ Body: CastCancel: true CastTime: 3000 AfterCastActDelay: 500 - Duration1: 15000 Cooldown: 3000 FixedCastTime: 1000 Requires: @@ -19438,7 +19435,6 @@ Body: Amount: 82 - Level: 5 Amount: 88 - Status: Burning - Id: 2213 Name: WL_COMET Description: Comet @@ -21913,7 +21909,7 @@ Body: Skill: Reproduce: true Duration1: 15000 - Duration2: 15000 + Duration2: 13000 Requires: SpCost: 10 ItemCost: @@ -24640,7 +24636,7 @@ Body: CopyFlags: Skill: Reproduce: true - Duration1: 5000 + Duration1: 4500 Requires: SpCost: - Level: 1 @@ -24734,7 +24730,7 @@ Body: Time: 3000 - Level: 5 Time: 3000 - Duration2: 5000 + Duration2: 4500 Cooldown: 3000 Requires: SpCost: @@ -27266,6 +27262,7 @@ Body: - Level: 5 Time: 6000 AfterCastActDelay: 1000 + Duration1: 18000 Cooldown: 2000 FixedCastTime: - Level: 1 @@ -29227,7 +29224,7 @@ Body: Element: Weapon CastTime: 1000 AfterCastActDelay: 1000 - Duration1: 120000 + Duration1: 108000 Cooldown: 2000 FixedCastTime: 2000 Requires: @@ -29971,7 +29968,7 @@ Body: - Level: 5 Time: 9000 AfterCastActDelay: 1000 - Duration2: 2000 + Duration2: 1500 Cooldown: 5000 FixedCastTime: 1000 Requires: @@ -30051,7 +30048,6 @@ Body: Weapon: Rifle: true SpiritSphereCost: -1 - Status: Stun - Id: 2572 Name: RL_R_TRIP_PLUSATK Description: Round Trip Plus Attack @@ -30118,7 +30114,7 @@ Body: Element: Weapon SplashArea: 3 CastCancel: true - Duration1: 20000 + Duration1: 18000 Cooldown: 1000 Requires: SpCost: @@ -30276,7 +30272,7 @@ Body: SplashArea: 3 CastCancel: true AfterCastActDelay: 1000 - Duration1: 7000 + Duration1: 5000 Cooldown: 10000 FixedCastTime: 1000 Requires: @@ -31900,15 +31896,15 @@ Body: AfterCastActDelay: 1000 Duration1: - Level: 1 - Time: 8000 + Time: 6000 - Level: 2 - Time: 10000 + Time: 8000 - Level: 3 - Time: 12000 + Time: 10000 - Level: 4 - Time: 14000 + Time: 12000 - Level: 5 - Time: 16000 + Time: 14000 Cooldown: 10000 Requires: SpCost: @@ -32690,7 +32686,7 @@ Body: CastTime: 1000 AfterCastActDelay: 500 Duration1: 5000 - Duration2: 5000 + Duration2: 4500 Cooldown: - Level: 1 Time: 10000 @@ -33021,7 +33017,7 @@ Body: Range: 1 Hit: Single HitCount: 1 - Duration2: 20000 + Duration2: 18000 Status: Burning - Id: 5018 Name: SU_BASIC_SKILL @@ -33073,7 +33069,7 @@ Body: SplashArea: 1 CastCancel: true AfterCastActDelay: 1000 - Duration2: 120000 + Duration2: 108000 Cooldown: - Level: 1 Time: 3000 @@ -33165,7 +33161,7 @@ Body: CastCancel: true CastTime: 2000 AfterCastActDelay: 1000 - Duration2: 120000 + Duration2: 108000 Requires: SpCost: 40 Status: Bleeding @@ -33264,7 +33260,7 @@ Body: Time: 3000 - Level: 5 Time: 3500 - Duration2: 20000 + Duration2: 18000 Cooldown: 5000 FixedCastTime: 3000 Requires: @@ -33484,7 +33480,7 @@ Body: CastCancel: true CastTime: 1000 AfterCastActDelay: 1000 - Duration2: 5000 + Duration2: 4500 Cooldown: 6000 Requires: SpCost: @@ -41723,7 +41719,7 @@ Body: Size: 9 Hit: Single HitCount: 1 - Duration1: 5000 + Duration1: 4500 FixedCastTime: 500 Requires: SpCost: @@ -42761,7 +42757,7 @@ Body: Time: 80000 - Level: 5 Time: 40000 - Duration2: 5000 + Duration2: 4500 Requires: SpCost: 10 Unit: @@ -42801,17 +42797,7 @@ Body: Time: 60000 - Level: 5 Time: 30000 - Duration2: - - Level: 1 - Time: 12000 - - Level: 2 - Time: 14000 - - Level: 3 - Time: 16000 - - Level: 4 - Time: 18000 - - Level: 5 - Time: 20000 + Duration2: 18000 Requires: SpCost: 12 Unit: @@ -42856,15 +42842,15 @@ Body: Time: 30000 Duration2: - Level: 1 - Time: 5500 + Time: 3000 - Level: 2 - Time: 8500 + Time: 6000 - Level: 3 - Time: 11500 + Time: 9000 - Level: 4 - Time: 14500 + Time: 12000 - Level: 5 - Time: 17500 + Time: 15000 Requires: SpCost: 10 Unit: @@ -43264,7 +43250,7 @@ Body: Element: Weapon CastTime: 1000 AfterCastActDelay: 2000 - Duration2: 5000 + Duration2: 4500 CastTimeFlags: IgnoreDex: true IgnoreStatus: true diff --git a/db/re/status.yml b/db/re/status.yml index d47143e234..31ce4ef270 100644 --- a/db/re/status.yml +++ b/db/re/status.yml @@ -148,7 +148,7 @@ Body: Refresh: true Inspiration: true - Status: Curse - DurationLookup: NPC_CURSEATTACK + DurationLookup: NPC_WIDECURSE CalcFlags: Luk: true Batk: true @@ -2938,6 +2938,7 @@ Body: Fail: Refresh: true Inspiration: true + Whiteimprison: true - Status: Freezing Icon: EFST_FROSTMISTY DurationLookup: WL_FROSTMISTY @@ -2956,7 +2957,7 @@ Body: Debuff: true OverlapFail: true SpreadEffect: true - MinDuration: 6000 + MinDuration: 10000 Fail: Refresh: true Inspiration: true diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 0677efdbbd..dd35ca4cd9 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -1419,7 +1419,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 if( sd && skill_lv > 5 && pc_checkskill(sd,SM_FATALBLOW)>0 ){ //BaseChance gets multiplied with BaseLevel/50.0; 500/50 simplifies to 10 [Playtester] status_change_start(src,bl,SC_STUN,(skill_lv-5)*sd->status.base_level*10, - skill_lv,0,0,0,skill_get_time2(SM_FATALBLOW,skill_lv),SCSTART_NONE); + skill_lv,0,0,0,skill_get_time2(skill_id,skill_lv),SCSTART_NONE); } break; @@ -14999,7 +14999,7 @@ static int skill_unit_onplace(struct skill_unit *unit, struct block_list *bl, t_ break; case UNT_CHAOSPANIC: - status_change_start(ss, bl, type, 3500 + (sg->skill_lv * 1500), sg->skill_lv, 0, 0, 1, sg->skill_lv * 4000, SCSTART_NOAVOID|SCSTART_NORATEDEF|SCSTART_NOTICKDEF); + status_change_start(ss, bl, type, 3500 + (sg->skill_lv * 1500), sg->skill_lv, 0, 0, 1, skill_get_time2(sg->skill_id, sg->skill_lv), SCSTART_NOAVOID|SCSTART_NORATEDEF|SCSTART_NOTICKDEF); break; case UNT_WARP_WAITING: { @@ -15944,7 +15944,7 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t_t case UNT_CHAOSPANIC: if (tsc && tsc->data[type]) break; - status_change_start(ss, bl, type, 3500 + (sg->skill_lv * 1500), sg->skill_lv, 0, 0, 1, sg->skill_lv * 4000, SCSTART_NOAVOID|SCSTART_NORATEDEF|SCSTART_NOTICKDEF); + status_change_start(ss, bl, type, 3500 + (sg->skill_lv * 1500), sg->skill_lv, 0, 0, 1, skill_get_time2(sg->skill_id, sg->skill_lv), SCSTART_NOAVOID|SCSTART_NORATEDEF|SCSTART_NOTICKDEF); break; case UNT_B_TRAP: diff --git a/src/map/status.cpp b/src/map/status.cpp index fffc20625b..eca49b91f5 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -8729,11 +8729,15 @@ t_tick status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_ if( sc && !sc->count ) sc = NULL; +#ifdef RENEWAL + uint16 levelAdv = (pow(max(0, status_get_lv(src) - status_get_lv(bl)), 2) / 5) * 100; +#endif + switch (type) { case SC_POISON: case SC_DPOISON: - sc_def = status->vit*100; #ifndef RENEWAL + sc_def = status->vit*100; sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10; if (sd) { // For players: 60000 - 450*vit - 100*luk @@ -8744,71 +8748,104 @@ t_tick status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_ tick>>=1; tick_def = (status->vit*200)/3; } +#else + sc_def = status->vit * 100 - levelAdv; + tick_def2 = -2000; #endif break; case SC_STUN: +#ifndef RENEWAL sc_def = status->vit*100; sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10; tick_def2 = status->luk*10; +#else + sc_def = status->vit * 100 - levelAdv; + tick_def2 = -500; +#endif break; case SC_SILENCE: #ifndef RENEWAL sc_def = status->vit*100; sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10; -#else - sc_def = status->int_*100; - sc_def2 = (status->vit + status->luk) * 5 + status_get_lv(bl)*10 - status_get_lv(src)*10; -#endif tick_def2 = status->luk*10; +#else + sc_def = status->int_ * 100 - levelAdv; + tick_def2 = -2000; +#endif break; case SC_BLEEDING: #ifndef RENEWAL sc_def = status->vit*100; sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10; -#else - sc_def = status->agi*100; - sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10; -#endif tick_def2 = status->luk*10; +#else + sc_def = status->agi * 100 - levelAdv; + tick_def2 = -12000; +#endif break; case SC_SLEEP: #ifndef RENEWAL sc_def = status->int_*100; sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10; -#else - sc_def = status->agi*100; - sc_def2 = (status->int_ + status->luk) * 5 + status_get_lv(bl)*10 - status_get_lv(src)*10; -#endif tick_def2 = status->luk*10; +#else + sc_def = status->agi * 100 - levelAdv; + tick_def2 = -2000; +#endif break; case SC_STONE: +#ifndef RENEWAL sc_def = status->mdef*100; sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10; tick_def = 0; // No duration reduction +#else + sc_def = status->mdef * 100 - levelAdv; + tick_def2 = -3000; +#endif break; case SC_FREEZE: +#ifndef RENEWAL sc_def = status->mdef*100; sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10; tick_def2 = status_src->luk*-10; // Caster can increase final duration with luk +#else + sc_def = status->mdef * 100 - levelAdv; + tick_def2 = -3000; +#endif break; case SC_CURSE: // Special property: immunity when luk is zero if (status->luk == 0) return 0; +#ifndef RENEWAL sc_def = status->luk*100; sc_def2 = status->luk*10 - status_get_lv(src)*10; // Curse only has a level penalty and no resistance tick_def = status->vit*100; tick_def2 = status->luk*10; +#else + sc_def = status->luk * 100 - levelAdv; + tick_def2 = -2000; +#endif break; case SC_BLIND: +#ifndef RENEWAL sc_def = (status->vit + status->int_)*50; sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10; tick_def2 = status->luk*10; +#else + sc_def = status->int_ * 100 - levelAdv; + tick_def2 = -2000; +#endif break; case SC_CONFUSION: +#ifndef RENEWAL sc_def = (status->str + status->int_)*50; sc_def2 = status_get_lv(src)*10 - status_get_lv(bl)*10 - status->luk*10; // Reversed sc_def2 tick_def2 = status->luk*10; +#else + sc_def = status->luk * 100 - levelAdv; + tick_def2 = -2000; +#endif break; case SC_DECREASEAGI: if (sd) @@ -8840,18 +8877,21 @@ t_tick status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_ tick_def2 = (status->vit + status->dex) * 50; break; case SC_WHITEIMPRISON: - if( tick == 5000 ) // 100% on caster + if( src == bl ) // 100% on caster break; - if( bl->type == BL_PC ) - tick_def2 = status_get_lv(bl)*20 + status->vit*25 + status->agi*10; - else - tick_def2 = (status->vit + status->luk)*50; + sc_def = status->str * 20 + status_get_lv(bl) * 20 + status->luk * 10; + tick_def2 = -2000; + break; + case SC_FEAR: + sc_def = status->int_ * 20 + status_get_lv(bl) * 20 + status->luk * 10; + tick_def2 = -4000; // 2 seconds is applied twice on Aegis break; case SC_BURNING: - tick_def2 = 75*status->luk + 125*status->agi; + sc_def = status->agi * 20 + status_get_lv(bl) * 20 + status->luk * 10; + tick_def2 = -2000; break; case SC_FREEZING: - tick_def2 = (status->vit + status->dex)*50; + tick_def2 = (status->vit + status->dex) * 50; break; case SC_OBLIVIONCURSE: // 100% - (100 - 0.8 x INT) sc_def = status->int_ * 80; @@ -8875,7 +8915,7 @@ t_tick status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_ tick_def2 = (status->vit + status->agi) * 70; break; case SC_CRYSTALIZE: - tick_def2 = (sd ? sd->status.vit : status_get_base_status(bl)->vit) * 100; + tick_def2 = status_get_base_status(bl)->vit * 100; break; case SC_VACUUM_EXTREME: tick_def2 = (sd ? sd->status.str : status_get_base_status(bl)->str) * 50; @@ -8909,8 +8949,8 @@ t_tick status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_ sc_def2 = sc_def2*battle_config.pc_sc_def_rate/100; } - sc_def = min(sc_def, battle_config.pc_max_sc_def*100); - sc_def2 = min(sc_def2, battle_config.pc_max_sc_def*100); + sc_def = cap_value(sc_def, 0, battle_config.pc_max_sc_def*100); + sc_def2 = cap_value(sc_def2, 0, battle_config.pc_max_sc_def*100); if (battle_config.pc_sc_def_rate != 100) { tick_def = tick_def*battle_config.pc_sc_def_rate/100; @@ -8922,8 +8962,8 @@ t_tick status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_ sc_def2 = sc_def2*battle_config.mob_sc_def_rate/100; } - sc_def = min(sc_def, battle_config.mob_max_sc_def*100); - sc_def2 = min(sc_def2, battle_config.mob_max_sc_def*100); + sc_def = cap_value(sc_def, 0, battle_config.mob_max_sc_def*100); + sc_def2 = cap_value(sc_def2, 0, battle_config.mob_max_sc_def*100); if (battle_config.mob_sc_def_rate != 100) { tick_def = tick_def*battle_config.mob_sc_def_rate/100; @@ -8983,41 +9023,31 @@ t_tick status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_ // Cap minimum rate rate = max(rate, scdb->min_rate); - // Cap minimum duration - tick = i64max(tick, scdb->min_duration); if (rate < 10000 && (rate <= 0 || !(rnd()%10000 < rate))) return 0; // Duration cannot be reduced if (flag&SCSTART_NOTICKDEF) - return i64max(tick, 1); + return i64max(tick, scdb->min_duration); tick -= tick*tick_def/10000; + +#ifdef RENEWAL + // Renewal applies item resistance also to duration + if (sd) { + for (const auto &it : sd->reseff) { + if (it.id == type) + tick -= tick * it.val / 10000; + } + if (sd->sc.data[SC_COMMONSC_RESIST] && SC_COMMON_MIN <= type && type <= SC_COMMON_MAX) + tick -= tick * sd->sc.data[SC_COMMONSC_RESIST]->val1 / 100; + } +#endif + tick -= tick_def2; - // Minimum durations - switch (type) { - case SC_ANKLE: - case SC_MARSHOFABYSS: - tick = i64max(tick, 5000); // Minimum duration 5s - break; - case SC_FREEZING: - tick = i64max(tick, 6000); // Minimum duration 6s - // NEED AEGIS CHECK: might need to be 10s (http://ro.gnjoy.com/news/notice/View.asp?seq=5352) - break; - case SC_BURNING: - case SC_STASIS: - case SC_VOICEOFSIREN: - tick = i64max(tick, 10000); // Minimum duration 10s - break; - default: - // Skills need to trigger even if the duration is reduced below 1ms - tick = i64max(tick, 1); - break; - } - - return tick; + return i64max(tick, scdb->min_duration); } /** @@ -9245,6 +9275,11 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty if (undead_flag && !(flag&SCSTART_NOAVOID)) return 0; break; + case SC_BURNING: + // Level 2 Fire Element is immune + if (status->def_ele == ELE_FIRE && status->ele_lv == 2) + return 0; + break; case SC_ALL_RIDING: if( !sd || sc->option&(OPTION_RIDING|OPTION_DRAGON|OPTION_WUG|OPTION_MADOGEAR) ) return 0;