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

View File

@ -2938,7 +2938,6 @@ static bool is_attack_critical(struct Damage* wd, struct block_list *src, struct
#ifdef RENEWAL #ifdef RENEWAL
case ASC_BREAKER: case ASC_BREAKER:
#endif #endif
case LG_CANNONSPEAR:
case GC_CROSSIMPACT: case GC_CROSSIMPACT:
case SHC_SAVAGE_IMPACT: case SHC_SAVAGE_IMPACT:
case SHC_ETERNAL_SLASH: 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; hitrate += pc_checkskill(sd, GN_REMODELING_CART) * 4;
break; break;
case LG_BANISHINGPOINT: case LG_BANISHINGPOINT:
hitrate += 3 * skill_lv; hitrate += 5 * skill_lv;
break; break;
case GC_VENOMPRESSURE: case GC_VENOMPRESSURE:
hitrate += 10 + 4 * skill_lv; hitrate += 10 + 4 * skill_lv;
@ -4523,7 +4522,22 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
break; break;
case PA_SHIELDCHAIN: case PA_SHIELDCHAIN:
#ifdef RENEWAL #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); RE_LVL_DMOD(100);
#else #else
skillratio += 30 * skill_lv; 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); RE_LVL_DMOD(120);
break; break;
case LG_CANNONSPEAR: 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); RE_LVL_DMOD(100);
if (sc && sc->getSCE(SC_SPEAR_SCAR))// Whats the official increase? [Rytech]
skillratio += skillratio * 50 / 100;
break; break;
case LG_BANISHINGPOINT: 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); RE_LVL_DMOD(100);
if (sc && sc->getSCE(SC_SPEAR_SCAR))// Whats the official increase? [Rytech]
skillratio += skillratio * 50 / 100;
break; break;
case LG_SHIELDPRESS: case LG_SHIELDPRESS:
skillratio += -100 + 200 * skill_lv + sstatus->str; skillratio += -100 + 200 * skill_lv + sstatus->str;
if (sd) { 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]; short index = sd->equip_index[EQI_HAND_L];
if (index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_ARMOR) if (index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_ARMOR)
skillratio += sd->inventory_data[index]->weight / 10; skillratio += sd->inventory_data[index]->weight / 10;
} }
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
if (sc && sc->getSCE(SC_SHIELD_POWER))// Whats the official increase? [Rytech]
skillratio += skillratio * 50 / 100;
break; break;
case LG_PINPOINTATTACK: case LG_PINPOINTATTACK:
skillratio += -100 + 100 * skill_lv + 5 * status_get_agi(src); 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; break;
case LG_OVERBRAND: case LG_OVERBRAND:
if(sc && sc->getSCE(SC_OVERBRANDREADY)) if(sc && sc->getSCE(SC_OVERBRANDREADY))
skillratio += -100 + 450 * skill_lv; skillratio += -100 + 500 * skill_lv;
else else
skillratio += -100 + 300 * skill_lv; skillratio += -100 + 350 * skill_lv;
skillratio += ((sd) ? pc_checkskill(sd, CR_SPEARQUICKEN) * 50 : 0); skillratio += ((sd) ? pc_checkskill(sd, CR_SPEARQUICKEN) * 50 : 0);
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
break; break;
case LG_EARTHDRIVE: 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); RE_LVL_DMOD(100);
if (sc && sc->getSCE(SC_SHIELD_POWER))// Whats the official increase? [Rytech]
skillratio += skillratio * 50 / 100;
break; break;
case LG_HESPERUSLIT: case LG_HESPERUSLIT:
if (sc && sc->getSCE(SC_INSPIRATION)) if (sc && sc->getSCE(SC_INSPIRATION))
@ -5415,6 +5444,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
break; break;
case IG_SHIELD_SHOOTING: case IG_SHIELD_SHOOTING:
skillratio += -100 + 600 * skill_lv + 5 * sstatus->pow; 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] if (sd) { // Damage affected by the shield's weight and refine. Need official formula. [Rytech]
short index = sd->equip_index[EQI_HAND_L]; 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; skillratio += sd->inventory_data[index]->weight / 20 * sd->inventory.u.items_inventory[index].refine;
} }
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
if ((i = pc_checkskill_imperial_guard(sd, 3)) > 0)
skillratio += skillratio * i / 100;
break; break;
case IG_OVERSLASH: case IG_OVERSLASH:
skillratio += -100 + 60 * skill_lv + 5 * sstatus->pow; 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. wd.div_ = min(wd.div_ + wd.miscflag, 3); // Number of hits doesn't go above 3.
break; break;
case IG_OVERSLASH: 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; break;
case SHC_ETERNAL_SLASH: case SHC_ETERNAL_SLASH:
if (sc && sc->getSCE(SC_E_SLASH_COUNT)) 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 RE_LVL_DMOD(100); // ! TODO: Confirm new formula
break; break;
case LG_RAYOFGENESIS: case LG_RAYOFGENESIS:
skillratio += -100 + 230 * skill_lv + sstatus->int_ / 6; // !TODO: What's the INT bonus? skillratio += -100 + 350 * skill_lv + sstatus->int_; // !TODO: What's the INT bonus?
if (sc && sc->getSCE(SC_INSPIRATION))
skillratio += 70 * skill_lv;
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
break; break;
case NPC_RAYOFGENESIS: 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) if ((i = pc_checkskill_imperial_guard(sd, 3)) > 0)
skillratio += skillratio * i / 100; skillratio += skillratio * i / 100;
break; break;
case IG_CROSS_RAIN:// Need official damage increase from Spear and Sword Mastery. [Rytech] case IG_CROSS_RAIN:
skillratio += -100 + 30 * skill_lv + 5 * sstatus->spl + 5 * pc_checkskill(sd, IG_SPEAR_SWORD_M); 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); 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; break;
case CD_ARBITRIUM: case CD_ARBITRIUM:
case CD_ARBITRIUM_ATK: 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; watk += sc->getSCE(SC_POWERFUL_FAITH)->val2;
if (sc->getSCE(SC_GUARD_STANCE)) if (sc->getSCE(SC_GUARD_STANCE))
watk -= sc->getSCE(SC_GUARD_STANCE)->val3; 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); 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; patk += sc->getSCE(SC_PRON_MARCH)->val2;
if (sc->getSCE(SC_TEMPERING)) if (sc->getSCE(SC_TEMPERING))
patk += sc->getSCE(SC_TEMPERING)->val2; 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); 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; smatk += sc->getSCE(SC_JAWAII_SERENADE)->val2;
if (sc->getSCE(SC_SPELL_ENCHANTING)) if (sc->getSCE(SC_SPELL_ENCHANTING))
smatk += sc->getSCE(SC_SPELL_ENCHANTING)->val2; 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); 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; tick = INFINITE_TICK;
break; break;
case SC_GUARDIAN_S: 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; break;
case SC_REBOUND_S: case SC_REBOUND_S:
val2 = 10 * val1;// Reduced Damage From Devotion 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; break;
case SC_ATTACK_STANCE: case SC_ATTACK_STANCE:
val2 = 40 * val1;// DEF Decrease val2 = 40 * val1;// DEF Decrease
val3 = 5 + 5 * val1;// ATK Increase val3 = 3 * val1; // P.ATK/S.MATK Increase
tick = INFINITE_TICK; tick = INFINITE_TICK;
break; break;
case SC_HOLY_S: case SC_HOLY_S: