Bug Fixes
* Fixed Venom Splasher consuming a second Red Gemstone. (bugreport:8506) * Corrected Final Strike's damage formula. (bugreport:8648) * Shield Boomerang should always be a neutral attack. * Shield Chain should always take the element of the weapon. * Updated Occult Impact damage and force element to neutral on final attack. (bugreport:7462) * Added a list of skills that get forced to neutral for the final attack in renewal mode. Merge from idAthena.
This commit is contained in:
parent
8198715203
commit
c7c5f7e89e
@ -365,7 +365,7 @@
|
||||
248,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, CR_TRUST,Faith
|
||||
249,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, CR_AUTOGUARD,Guard
|
||||
250,3,6,1,0,0,0,5,1,no,0,0,0,weapon,5:6:7:8:9,0x0, CR_SHIELDCHARGE,Smite
|
||||
251,3:5:7:9:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, CR_SHIELDBOOMERANG,Shield Boomerang
|
||||
251,3:5:7:9:11,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x0, CR_SHIELDBOOMERANG,Shield Boomerang
|
||||
252,0,6,4,0,0,0,10,1,no,0,0,0,weapon,0,0x0, CR_REFLECTSHIELD,Shield Reflect
|
||||
253,-2,8,1,6,0,0,10,-2,no,0,0,0,weapon,0,0x0, CR_HOLYCROSS,Holy Cross
|
||||
254,5,6,4,6,0x48,0,10,1,no,33,0x100,0,magic,0,0x0, CR_GRANDCROSS,Grand Cross
|
||||
@ -693,7 +693,7 @@
|
||||
477,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x4000, WS_WEAPONREFINE,Upgrade Weapon
|
||||
478,3,6,2,0,0x3,3,10,1,no,0,0,0,none,0,0x0, CR_SLIMPITCHER,Aid Condensed Potion
|
||||
479,1,6,16,0,0x1,0,5,1,yes,0,0,0,weapon,0,0x0, CR_FULLPROTECTION,Full Protection
|
||||
480,5,8,1,0,0,0,5,5,no,0,0,0,weapon,0,0x0, PA_SHIELDCHAIN,Shield Chain
|
||||
480,5,8,1,-1,0,0,5,5,no,0,0,0,weapon,0,0x0, PA_SHIELDCHAIN,Shield Chain
|
||||
481,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, HP_MANARECHARGE,Mana Recharge
|
||||
482,0,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,0x0, PF_DOUBLECASTING,Double Casting
|
||||
483,16,6,2,0,0x1,1:2:3:4:5,1,1,no,0,0,0,none,0,0x20, HW_GANBANTEIN,Ganbantein
|
||||
|
@ -365,7 +365,7 @@
|
||||
248,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, CR_TRUST,Faith
|
||||
249,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, CR_AUTOGUARD,Guard
|
||||
250,3,6,1,0,0,0,5,1,no,0,0,0,weapon,5:6:7:8:9,0x0, CR_SHIELDCHARGE,Smite
|
||||
251,3:5:7:9:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, CR_SHIELDBOOMERANG,Shield Boomerang
|
||||
251,3:5:7:9:11,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x0, CR_SHIELDBOOMERANG,Shield Boomerang
|
||||
252,0,6,4,0,0,0,10,1,no,0,0,0,weapon,0,0x0, CR_REFLECTSHIELD,Shield Reflect
|
||||
253,-2,8,1,6,0,0,10,-2,no,0,0,0,weapon,0,0x0, CR_HOLYCROSS,Holy Cross
|
||||
254,5,6,4,6,0x48,0,10,1,no,33,0x100,0,magic,0,0x0, CR_GRANDCROSS,Grand Cross
|
||||
@ -383,7 +383,7 @@
|
||||
263,-1,8,0,-1,0,0,10,-3,no,0,0,0,weapon,0,0x0, MO_TRIPLEATTACK,Raging Trifecta Blow
|
||||
264,18,6,2,0,0x1,0,1,1,no,0,0,0,none,0,0x0, MO_BODYRELOCATION,Snap
|
||||
265,0,0,0,0,0,0,10,0,no,0,0,0,weapon,0,0x0, MO_DODGE,Dodge
|
||||
266,2,6,1,0,0x40,0,5,1,no,0,0,0,weapon,0,0x0, MO_INVESTIGATE,Occult Impaction
|
||||
266,2,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0x0, MO_INVESTIGATE,Occult Impaction
|
||||
267,9,8,1,-1,0,0,5,1:2:3:4:5,no,0,0,0,weapon,0,0x0, MO_FINGEROFFENSIVE,Throw Spirit Sphere
|
||||
268,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0,0x0, MO_STEELBODY,Mental Strength
|
||||
269,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0,0x0, MO_BLADESTOP,Root
|
||||
|
@ -2399,12 +2399,20 @@ static struct Damage battle_calc_element_damage(struct Damage wd, struct block_l
|
||||
{
|
||||
wd.damage=battle_attr_fix(src, target, wd.damage, right_element, tstatus->def_ele, tstatus->ele_lv);
|
||||
|
||||
if( skill_id == MC_CARTREVOLUTION ) //Cart Revolution apply the element fix once more with neutral element
|
||||
wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
|
||||
if( skill_id == GS_GROUNDDRIFT ) //Additional 50*lv Neutral damage.
|
||||
wd.damage += battle_attr_fix(src, target, 50*skill_lv, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
|
||||
switch( skill_id ) {
|
||||
case MC_CARTREVOLUTION: //Cart Revolution apply the element fix once more with neutral element
|
||||
wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
break;
|
||||
case GS_GROUNDDRIFT:
|
||||
//Additional 50 * lv neutral damage
|
||||
wd.damage += battle_attr_fix(src, target, 50 * skill_lv, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
break;
|
||||
case GN_CARTCANNON:
|
||||
case KO_HAPPOKUNAI:
|
||||
//Forced to ammo's element
|
||||
wd.damage = battle_attr_fix(src, target, wd.damage, (sd && sd->bonus.arrow_ele) ? sd->bonus.arrow_ele : ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( is_attack_left_handed(src, skill_id) && wd.damage2 > 0 )
|
||||
wd.damage2 = battle_attr_fix(src, target, wd.damage2, left_element ,tstatus->def_ele, tstatus->ele_lv);
|
||||
@ -2611,7 +2619,7 @@ struct Damage battle_calc_skill_base_damage(struct Damage wd, struct block_list
|
||||
}
|
||||
#else
|
||||
case NJ_ISSEN:
|
||||
wd.damage = 40 * sstatus->str + (8 / 100) * skill_lv * sstatus->hp;
|
||||
wd.damage = (40 * sstatus->str) + (8 / 100 * skill_lv * sstatus->hp);
|
||||
wd.damage2 = 0;
|
||||
break;
|
||||
case LK_SPIRALPIERCE:
|
||||
@ -3010,7 +3018,7 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
|
||||
skillratio+= 50 * skill_lv;
|
||||
break;
|
||||
case MO_INVESTIGATE:
|
||||
skillratio += 75*skill_lv;
|
||||
skillratio += 100 + 150 * skill_lv;
|
||||
break;
|
||||
case MO_EXTREMITYFIST:
|
||||
skillratio += 100*(7 + sstatus->sp/10);
|
||||
@ -4792,23 +4800,54 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef RENEWAL
|
||||
// forced to neutral skills [helvetica]
|
||||
// skills forced to neutral gain benefits from weapon element
|
||||
// but final damage is considered "neutral" and resistances are applied again
|
||||
switch (skill_id) {
|
||||
case GN_CARTCANNON: // Cart Cannon gets forced to element of cannon ball (neutral or holy/shadow/ghost)
|
||||
if (sd)
|
||||
wd.damage = battle_attr_fix(src, target, wd.damage, sd->bonus.arrow_ele ? sd->bonus.arrow_ele : ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
else
|
||||
wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
wd.damage = battle_attr_fix(src, target, wd.damage, (sd && sd->bonus.arrow_ele) ? sd->bonus.arrow_ele : ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
break;
|
||||
case MC_CARTREVOLUTION: // Cart Revolution gets forced to neutral element
|
||||
wd.damage = battle_attr_fix(src,target,wd.damage,ELE_NEUTRAL,tstatus->def_ele, tstatus->ele_lv);
|
||||
case MO_INVESTIGATE:
|
||||
wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
break;
|
||||
case CR_SHIELDBOOMERANG:
|
||||
case LK_SPIRALPIERCE:
|
||||
case ML_SPIRALPIERCE:
|
||||
case PA_SHIELDCHAIN:
|
||||
case PA_SACRIFICE:
|
||||
case RK_DRAGONBREATH:
|
||||
case RK_DRAGONBREATH_WATER:
|
||||
case NC_SELFDESTRUCTION:
|
||||
case LG_SHIELDPRESS:
|
||||
case LG_EARTHDRIVE:
|
||||
case KO_HAPPOKUNAI: {
|
||||
int64 tmp = wd.damage;
|
||||
|
||||
if (sd) {
|
||||
if (skill_id == PA_SHIELDCHAIN) {
|
||||
wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
if (wd.damage > 0) {
|
||||
wd.damage = battle_attr_fix(src, target, tmp, right_element, tstatus->def_ele, tstatus->ele_lv);
|
||||
if (!wd.damage)
|
||||
wd.damage = battle_attr_fix(src, target, tmp, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
}
|
||||
} else if (skill_id == KO_HAPPOKUNAI) {
|
||||
wd.damage = battle_attr_fix(src, target, wd.damage, (sd->bonus.arrow_ele) ? sd->bonus.arrow_ele : ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
if (wd.damage > 0) {
|
||||
wd.damage = battle_attr_fix(src, target, tmp, right_element, tstatus->def_ele, tstatus->ele_lv);
|
||||
if (!wd.damage)
|
||||
wd.damage = battle_attr_fix(src, target, tmp, (sd->bonus.arrow_ele) ? sd->bonus.arrow_ele : ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||
}
|
||||
} else
|
||||
wd.damage = battle_attr_fix(src, target, wd.damage, right_element, tstatus->def_ele, tstatus->ele_lv);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// perform multihit calculations
|
||||
#ifdef RENEWAL
|
||||
damage_div_fix_renewal(wd, wd.div_);
|
||||
#endif
|
||||
damage_div_fix(wd.damage, wd.div_);
|
||||
|
@ -4387,6 +4387,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
|
||||
// recursive invocation of skill_castend_damage_id() with flag|1
|
||||
map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), ( skill_id == WM_REVERBERATION_MELEE || skill_id == WM_REVERBERATION_MAGIC )?BL_CHAR:splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
|
||||
if( skill_id == AS_SPLASHER ) {
|
||||
map_freeblock_unlock(); // Don't consume a second gemstone.
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user