4th Improvement - Imperial Guard (#7713)

This commit is contained in:
munkrej 2023-04-15 16:53:39 +02:00 committed by GitHub
parent e40c3edc31
commit 382d6bf54a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 103 additions and 68 deletions

View File

@ -24412,13 +24412,13 @@ Body:
- Level: 2
Area: 1
- Level: 3
Area: 1
Area: 2
- Level: 4
Area: 2
- Level: 5
Area: 2
Area: 3
ActiveInstance: 11
Cooldown: 2000
Cooldown: 1700
Requires:
SpCost:
- Level: 1
@ -24449,23 +24449,23 @@ Body:
- Level: 1
Amount: 20
- Level: 2
Amount: 20
Amount: 22
- Level: 3
Amount: 20
Amount: 24
- Level: 4
Amount: 20
Amount: 26
- Level: 5
Amount: 20
Amount: 28
- Level: 6
Amount: 25
Amount: 30
- Level: 7
Amount: 25
Amount: 32
- Level: 8
Amount: 25
Amount: 34
- Level: 9
Amount: 25
Amount: 36
- Level: 10
Amount: 25
Amount: 38
Weapon:
1hSpear: true
2hSpear: true
@ -24865,25 +24865,25 @@ Body:
Requires:
SpCost:
- Level: 1
Amount: 30
Amount: 45
- Level: 2
Amount: 40
- Level: 3
Amount: 50
- Level: 3
Amount: 55
- Level: 4
Amount: 60
- Level: 5
Amount: 70
Amount: 65
- Level: 6
Amount: 80
Amount: 70
- Level: 7
Amount: 90
Amount: 75
- Level: 8
Amount: 100
Amount: 80
- Level: 9
Amount: 110
Amount: 85
- Level: 10
Amount: 120
Amount: 90
- Id: 2322
Name: LG_PIETY
Description: Piety
@ -24977,15 +24977,15 @@ Body:
Time: 15000
Cooldown:
- Level: 1
Time: 7000
Time: 6500
- Level: 2
Time: 6000
Time: 5500
- Level: 3
Time: 5000
Time: 4500
- Level: 4
Time: 4000
Time: 3500
- Level: 5
Time: 3000
Time: 2500
Requires:
SpCost:
- Level: 1
@ -25010,9 +25010,8 @@ Body:
HitCount: 3
Element: Weapon
CastCancel: true
CastTime: 1000
AfterCastActDelay: 3000
Cooldown: 20000
AfterCastActDelay: 500
Cooldown: 200
Requires:
SpCost:
- Level: 1
@ -36761,6 +36760,7 @@ Body:
Toggleable: true
Hit: Single
HitCount: 1
GiveAp: 15
SplashArea: 10
CastCancel: true
CastTime: 2000
@ -36956,7 +36956,7 @@ Body:
CastTime: 500
AfterCastActDelay: 500
Duration1: 10000
Cooldown: 2000
Cooldown: 1000
FixedCastTime: 500
Requires:
SpCost:
@ -36982,17 +36982,17 @@ Body:
TargetType: Attack
DamageFlags:
Splash: true
Range: 1
Range: 3
Hit: Multi_Hit
HitCount: 2
HitCount: 3
Element: Weapon
SplashArea: 3
GiveAp: 3
GiveAp: 2
CastCancel: true
CastTime: 1000
AfterCastActDelay: 500
Cooldown: 3000
FixedCastTime: 1000
Cooldown: 1000
FixedCastTime: 500
Requires:
SpCost:
- Level: 1
@ -37033,7 +37033,7 @@ Body:
AfterCastActDelay: 500
Duration1: 4500
Cooldown: 5000
FixedCastTime: 1000
FixedCastTime: 1500
Requires:
SpCost:
- Level: 1

View File

@ -2938,7 +2938,6 @@ static bool is_attack_critical(struct Damage* wd, struct block_list *src, struct
#ifdef RENEWAL
case ASC_BREAKER:
#endif
case LG_CANNONSPEAR:
case GC_CROSSIMPACT:
case SHC_SAVAGE_IMPACT:
case SHC_ETERNAL_SLASH:
@ -3161,7 +3160,7 @@ static bool is_attack_hitting(struct Damage* wd, struct block_list *src, struct
hitrate += pc_checkskill(sd, GN_REMODELING_CART) * 4;
break;
case LG_BANISHINGPOINT:
hitrate += 3 * skill_lv;
hitrate += 5 * skill_lv;
break;
case GC_VENOMPRESSURE:
hitrate += 10 + 4 * skill_lv;
@ -4523,7 +4522,22 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
break;
case PA_SHIELDCHAIN:
#ifdef RENEWAL
skillratio = 60 + 40 * skill_lv;
skillratio = -100 + 300 + 200 * skill_lv;
if( sd != nullptr ){
int16 index = sd->equip_index[EQI_HAND_L];
// Damage affected by the shield's weight and refine.
if( index >= 0 && sd->inventory_data[index] != nullptr && sd->inventory_data[index]->type == IT_ARMOR ){
skillratio += sd->inventory_data[index]->weight / 10 + 4 * sd->inventory.u.items_inventory[index].refine;
}
// Damage affected by shield mastery
if( sc != nullptr && sc->getSCE( SC_SHIELD_POWER ) ){
skillratio += skill_lv * 14 * pc_checkskill( sd, IG_SHIELD_MASTERY );
}
}
RE_LVL_DMOD(100);
#else
skillratio += 30 * skill_lv;
@ -4871,28 +4885,40 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
RE_LVL_DMOD(120);
break;
case LG_CANNONSPEAR:
skillratio += -100 + skill_lv * (50 + sstatus->str);
skillratio += -100 + skill_lv * ( 120 + sstatus->str );
if( sc != nullptr && sc->getSCE( SC_SPEAR_SCAR ) ){
skillratio += 400;
}
RE_LVL_DMOD(100);
if (sc && sc->getSCE(SC_SPEAR_SCAR))// Whats the official increase? [Rytech]
skillratio += skillratio * 50 / 100;
break;
case LG_BANISHINGPOINT:
skillratio += -100 + (80 * skill_lv) + ((sd) ? pc_checkskill(sd,SM_BASH) * 30 : 0);
skillratio += -100 + ( 100 * skill_lv );
if( sd != nullptr ){
skillratio += pc_checkskill( sd, SM_BASH ) * 70;
}
if( sc != nullptr && sc->getSCE( SC_SPEAR_SCAR ) ){
skillratio += 800;
}
RE_LVL_DMOD(100);
if (sc && sc->getSCE(SC_SPEAR_SCAR))// Whats the official increase? [Rytech]
skillratio += skillratio * 50 / 100;
break;
case LG_SHIELDPRESS:
skillratio += -100 + 200 * skill_lv + sstatus->str;
if (sd) {
if( sc != nullptr && sc->getSCE( SC_SHIELD_POWER ) ){
skillratio += skill_lv * 15 * pc_checkskill( sd, IG_SHIELD_MASTERY );
}
short index = sd->equip_index[EQI_HAND_L];
if (index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_ARMOR)
skillratio += sd->inventory_data[index]->weight / 10;
}
RE_LVL_DMOD(100);
if (sc && sc->getSCE(SC_SHIELD_POWER))// Whats the official increase? [Rytech]
skillratio += skillratio * 50 / 100;
break;
case LG_PINPOINTATTACK:
skillratio += -100 + 100 * skill_lv + 5 * status_get_agi(src);
@ -4911,17 +4937,20 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
break;
case LG_OVERBRAND:
if(sc && sc->getSCE(SC_OVERBRANDREADY))
skillratio += -100 + 450 * skill_lv;
skillratio += -100 + 500 * skill_lv;
else
skillratio += -100 + 300 * skill_lv;
skillratio += -100 + 350 * skill_lv;
skillratio += ((sd) ? pc_checkskill(sd, CR_SPEARQUICKEN) * 50 : 0);
RE_LVL_DMOD(100);
break;
case LG_EARTHDRIVE:
skillratio += -100 + 380 * skill_lv + ((sstatus->str + sstatus->vit) / 6); // !TODO: What's the STR/VIT bonus?
skillratio += -100 + 380 * skill_lv + sstatus->str + sstatus->vit; // !TODO: What's the STR/VIT bonus?
if( sc != nullptr && sc->getSCE( SC_SHIELD_POWER ) ){
skillratio += skill_lv * 37 * pc_checkskill( sd, IG_SHIELD_MASTERY );
}
RE_LVL_DMOD(100);
if (sc && sc->getSCE(SC_SHIELD_POWER))// Whats the official increase? [Rytech]
skillratio += skillratio * 50 / 100;
break;
case LG_HESPERUSLIT:
if (sc && sc->getSCE(SC_INSPIRATION))
@ -5415,6 +5444,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
break;
case IG_SHIELD_SHOOTING:
skillratio += -100 + 600 * skill_lv + 5 * sstatus->pow;
skillratio += skill_lv * 15 * pc_checkskill( sd, IG_SHIELD_MASTERY );
if (sd) { // Damage affected by the shield's weight and refine. Need official formula. [Rytech]
short index = sd->equip_index[EQI_HAND_L];
@ -5422,8 +5452,6 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
skillratio += sd->inventory_data[index]->weight / 20 * sd->inventory.u.items_inventory[index].refine;
}
RE_LVL_DMOD(100);
if ((i = pc_checkskill_imperial_guard(sd, 3)) > 0)
skillratio += skillratio * i / 100;
break;
case IG_OVERSLASH:
skillratio += -100 + 60 * skill_lv + 5 * sstatus->pow;
@ -6525,7 +6553,11 @@ static struct Damage initialize_weapon_data(struct block_list *src, struct block
wd.div_ = min(wd.div_ + wd.miscflag, 3); // Number of hits doesn't go above 3.
break;
case IG_OVERSLASH:
wd.div_ = min(wd.div_ + wd.miscflag, 5); // Number of hits doesn't appear to go above 5.
if( wd.miscflag >= 4 ){
wd.div_ = 7;
}else if( wd.miscflag >= 2 ){
wd.div_ = 5;
}
break;
case SHC_ETERNAL_SLASH:
if (sc && sc->getSCE(SC_E_SLASH_COUNT))
@ -7480,9 +7512,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
RE_LVL_DMOD(100); // ! TODO: Confirm new formula
break;
case LG_RAYOFGENESIS:
skillratio += -100 + 230 * skill_lv + sstatus->int_ / 6; // !TODO: What's the INT bonus?
if (sc && sc->getSCE(SC_INSPIRATION))
skillratio += 70 * skill_lv;
skillratio += -100 + 350 * skill_lv + sstatus->int_; // !TODO: What's the INT bonus?
RE_LVL_DMOD(100);
break;
case NPC_RAYOFGENESIS:
@ -7789,13 +7819,14 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
if ((i = pc_checkskill_imperial_guard(sd, 3)) > 0)
skillratio += skillratio * i / 100;
break;
case IG_CROSS_RAIN:// Need official damage increase from Spear and Sword Mastery. [Rytech]
skillratio += -100 + 30 * skill_lv + 5 * sstatus->spl + 5 * pc_checkskill(sd, IG_SPEAR_SWORD_M);
case IG_CROSS_RAIN:
if( sc && sc->getSCE( SC_HOLY_S ) ){
skillratio += -100 + ( 250 + 10 * pc_checkskill( sd, IG_SPEAR_SWORD_M ) ) * skill_lv;
}else{
skillratio += -100 + ( 150 + 5 * pc_checkskill( sd, IG_SPEAR_SWORD_M ) ) * skill_lv;
}
skillratio += 5 * sstatus->spl;
RE_LVL_DMOD(100);
if ((i = pc_checkskill_imperial_guard(sd, 3)) > 0)
skillratio += skillratio * i / 100;
if (sc && sc->getSCE(SC_HOLY_S))
skillratio += 20 * skill_lv;
break;
case CD_ARBITRIUM:
case CD_ARBITRIUM_ATK:

View File

@ -7143,8 +7143,6 @@ static unsigned short status_calc_watk(struct block_list *bl, status_change *sc,
watk += sc->getSCE(SC_POWERFUL_FAITH)->val2;
if (sc->getSCE(SC_GUARD_STANCE))
watk -= sc->getSCE(SC_GUARD_STANCE)->val3;
if (sc->getSCE(SC_ATTACK_STANCE))
watk += sc->getSCE(SC_ATTACK_STANCE)->val3;
return (unsigned short)cap_value(watk,0,USHRT_MAX);
}
@ -8474,6 +8472,9 @@ static signed short status_calc_patk(struct block_list *bl, status_change *sc, i
patk += sc->getSCE(SC_PRON_MARCH)->val2;
if (sc->getSCE(SC_TEMPERING))
patk += sc->getSCE(SC_TEMPERING)->val2;
if( sc->getSCE( SC_ATTACK_STANCE ) ){
patk += sc->getSCE( SC_ATTACK_STANCE )->val3;
}
return (short)cap_value(patk, 0, SHRT_MAX);
}
@ -8498,6 +8499,9 @@ static signed short status_calc_smatk(struct block_list *bl, status_change *sc,
smatk += sc->getSCE(SC_JAWAII_SERENADE)->val2;
if (sc->getSCE(SC_SPELL_ENCHANTING))
smatk += sc->getSCE(SC_SPELL_ENCHANTING)->val2;
if( sc->getSCE( SC_ATTACK_STANCE ) ){
smatk += sc->getSCE( SC_ATTACK_STANCE )->val3;
}
return (short)cap_value(smatk, 0, SHRT_MAX);
}
@ -12526,7 +12530,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
tick = INFINITE_TICK;
break;
case SC_GUARDIAN_S:
val2 = status->max_hp * (50 * val1) / 100;// Barrier HP
val2 = ( status->max_hp / 2 ) * ( 50 * val1 ) / 100 + 15 * status->sta; // Barrier HP
break;
case SC_REBOUND_S:
val2 = 10 * val1;// Reduced Damage From Devotion
@ -12535,7 +12539,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
break;
case SC_ATTACK_STANCE:
val2 = 40 * val1;// DEF Decrease
val3 = 5 + 5 * val1;// ATK Increase
val3 = 3 * val1; // P.ATK/S.MATK Increase
tick = INFINITE_TICK;
break;
case SC_HOLY_S: