4th Improvement - Arch Mage (#7708)

This commit is contained in:
munkrej 2023-04-15 22:52:03 +02:00 committed by GitHub
parent 452238b523
commit e4acd6e5dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 111 additions and 30 deletions

View File

@ -35391,6 +35391,7 @@ Body:
MaxLevel: 5
Type: Magic
TargetType: Ground
GiveAp: 4
Range: 9
Hit: Single
HitCount: 1
@ -35983,7 +35984,7 @@ Body:
FixedCastTime: 4000
Requires:
SpCost: 60
ApCost: 200
ApCost: 150
Status: Climax
- Id: 5233
Name: AG_ROCK_DOWN
@ -35997,12 +35998,32 @@ Body:
Hit: Multi_Hit
HitCount: -5
Element: Earth
SplashArea: 1
GiveAp: 4
SplashArea:
- Level: 1
Area: 2
- Level: 2
Area: 2
- Level: 3
Area: 2
- Level: 4
Area: 3
- Level: 5
Area: 3
GiveAp: 1
CastCancel: true
CastTime: 4000
AfterCastActDelay: 1000
Cooldown: 4000
AfterCastActDelay: 500
Cooldown:
- Level: 1
Time: 3000
- Level: 2
Time: 2100
- Level: 3
Time: 1500
- Level: 4
Time: 900
- Level: 5
Time: 300
FixedCastTime: 1500
Requires:
SpCost:
@ -36028,11 +36049,21 @@ Body:
Element: Wind
SplashArea: 1
ActiveInstance: 14
GiveAp: 4
GiveAp: 1
CastCancel: true
CastTime: 4000
AfterCastActDelay: 1000
Cooldown: 4000
AfterCastActDelay: 500
Cooldown:
- Level: 1
Time: 3000
- Level: 2
Time: 2100
- Level: 3
Time: 1500
- Level: 4
Time: 900
- Level: 5
Time: 300
FixedCastTime: 1500
Requires:
SpCost:
@ -36058,11 +36089,21 @@ Body:
Element: Fire
SplashArea: 1
ActiveInstance: 14
GiveAp: 4
GiveAp: 1
CastCancel: true
CastTime: 4000
AfterCastActDelay: 1000
Cooldown: 4000
AfterCastActDelay: 500
Cooldown:
- Level: 1
Time: 3000
- Level: 2
Time: 2100
- Level: 3
Time: 1500
- Level: 4
Time: 900
- Level: 5
Time: 300
FixedCastTime: 1500
Requires:
SpCost:
@ -36082,10 +36123,23 @@ Body:
MaxLevel: 5
Type: Magic
TargetType: Attack
DamageFlags:
Splash: true
Range: 9
Hit: Multi_Hit
HitCount: -2
HitCount: 1
Element: Fire
SplashArea:
- Level: 1
Area: 2
- Level: 2
Area: 2
- Level: 3
Area: 2
- Level: 4
Area: 3
- Level: 5
Area: 3
Requires:
SpCost: 1
- Id: 5237
@ -36101,20 +36155,20 @@ Body:
Element: Water
SplashArea:
- Level: 1
Area: 2
- Level: 2
Area: 2
- Level: 3
Area: 3
- Level: 4
Area: 3
- Level: 5
Area: 4
GiveAp: 4
- Level: 2
Area: 4
- Level: 3
Area: 5
- Level: 4
Area: 5
- Level: 5
Area: 6
GiveAp: 1
CastCancel: true
CastTime: 4000
AfterCastActDelay: 1000
Cooldown: 4000
AfterCastActDelay: 500
Cooldown: 300
FixedCastTime: 1500
Requires:
SpCost:

View File

@ -702,8 +702,6 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
}
cardfix = cardfix * (100 + sd->indexed_bonus.magic_addsize[tstatus->size] + sd->indexed_bonus.magic_addsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 + sd->indexed_bonus.magic_addclass[tstatus->class_] + sd->indexed_bonus.magic_addclass[CLASS_ALL]) / 100;
if (sd->status.weapon == W_2HSTAFF)// 2-Handed Staff Mastery
cardfix = cardfix * (100 + pc_checkskill(sd, AG_TWOHANDSTAFF)) / 100;
for (const auto &it : sd->add_mdmg) {
if (it.id == t_class) {
cardfix = cardfix * (100 + it.val) / 100;
@ -7146,6 +7144,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case TR_METALIC_FURY:// Deals up to 5 additional hits. But what affects the number of hits? [Rytech]
ad.div_ = min(ad.div_ + mflag, 5); // Number of hits doesn't go above 5.
break;
case AG_CRIMSON_ARROW_ATK:
if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){
ad.div_ = 2;
}
break;
}
//Set miscellaneous data that needs be filled
@ -7745,7 +7748,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
RE_LVL_DMOD(100);
break;
case AG_MYSTERY_ILLUSION:
skillratio += -100 + 250 * skill_lv + 5 * sstatus->spl;
skillratio += -100 + 500 * skill_lv + 5 * sstatus->spl;
RE_LVL_DMOD(100);
break;
case AG_VIOLENT_QUAKE_ATK:
@ -7820,20 +7823,38 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
RE_LVL_DMOD(100);
break;
case AG_ROCK_DOWN:
skillratio += -100 + 750 * skill_lv + 5 * sstatus->spl;
skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl;
if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){
skillratio += 250 * skill_lv;
}
RE_LVL_DMOD(100);
break;
case AG_STORM_CANNON:
skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl;
if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){
skillratio += 250 * skill_lv;
}
RE_LVL_DMOD(100);
break;
case AG_CRIMSON_ARROW:
case AG_CRIMSON_ARROW_ATK:
skillratio += -100 + 300 * skill_lv + 5 * sstatus->spl;
RE_LVL_DMOD(100);
break;
case AG_CRIMSON_ARROW_ATK:
skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl;
RE_LVL_DMOD(100);
break;
case AG_FROZEN_SLASH:
skillratio += -100 + 750 * skill_lv + 5 * sstatus->spl;
skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl;
if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){
skillratio += 250 * skill_lv;
}
RE_LVL_DMOD(100);
break;
case IG_JUDGEMENT_CROSS:

View File

@ -5390,7 +5390,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
skill_get_type(skill_id), src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
}
if (skill_id == AG_CRIMSON_ARROW)
skill_attack(skill_get_type(AG_CRIMSON_ARROW_ATK), src, src, bl, AG_CRIMSON_ARROW_ATK, skill_lv, tick, flag|SD_LEVEL|SD_ANIMATION);
skill_castend_damage_id(src, bl, AG_CRIMSON_ARROW_ATK, skill_lv, tick, flag|SD_LEVEL|SD_ANIMATION);
break;
case MO_INVESTIGATE:
@ -5612,6 +5612,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
case DK_SERVANT_W_DEMOL:
case DK_MADNESS_CRUSHER:
case DK_HACKANDSLASHER:
case AG_CRIMSON_ARROW_ATK:
case AG_DESTRUCTIVE_HURRICANE:
case AG_SOUL_VC_STRIKE:
case AG_CRYSTAL_IMPACT:

View File

@ -4366,6 +4366,11 @@ int status_calc_pc_sub(map_session_data* sd, uint8 opt)
base_status->smatk += skill * 3;
}
// 2-Handed Staff Mastery
if( sd->status.weapon == W_2HSTAFF && ( skill = pc_checkskill( sd, AG_TWOHANDSTAFF ) ) > 0 ){
base_status->smatk += skill * 2;
}
// ----- PHYSICAL RESISTANCE CALCULATION -----
if ((skill = pc_checkskill_imperial_guard(sd, 1)) > 0)// IG_SHIELD_MASTERY
base_status->res += skill * 3;