diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index a3777d3b73..0d4b0d07b2 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -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 diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 1b35440efe..e18eb03e3b 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -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: diff --git a/src/map/status.cpp b/src/map/status.cpp index 38ad25ad83..0348b72a07 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -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: