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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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);
|
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
|
switch( skill_id ) {
|
||||||
wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
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);
|
||||||
if( skill_id == GS_GROUNDDRIFT ) //Additional 50*lv Neutral damage.
|
break;
|
||||||
wd.damage += battle_attr_fix(src, target, 50*skill_lv, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
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 )
|
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);
|
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
|
#else
|
||||||
case NJ_ISSEN:
|
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;
|
wd.damage2 = 0;
|
||||||
break;
|
break;
|
||||||
case LK_SPIRALPIERCE:
|
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;
|
skillratio+= 50 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case MO_INVESTIGATE:
|
case MO_INVESTIGATE:
|
||||||
skillratio += 75*skill_lv;
|
skillratio += 100 + 150 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case MO_EXTREMITYFIST:
|
case MO_EXTREMITYFIST:
|
||||||
skillratio += 100*(7 + sstatus->sp/10);
|
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]
|
// forced to neutral skills [helvetica]
|
||||||
// skills forced to neutral gain benefits from weapon element
|
// skills forced to neutral gain benefits from weapon element
|
||||||
// but final damage is considered "neutral" and resistances are applied again
|
// but final damage is considered "neutral" and resistances are applied again
|
||||||
switch (skill_id) {
|
switch (skill_id) {
|
||||||
case GN_CARTCANNON: // Cart Cannon gets forced to element of cannon ball (neutral or holy/shadow/ghost)
|
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 && sd->bonus.arrow_ele) ? sd->bonus.arrow_ele : ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||||
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);
|
|
||||||
break;
|
break;
|
||||||
case MC_CARTREVOLUTION: // Cart Revolution gets forced to neutral element
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// perform multihit calculations
|
// perform multihit calculations
|
||||||
#ifdef RENEWAL
|
|
||||||
damage_div_fix_renewal(wd, wd.div_);
|
damage_div_fix_renewal(wd, wd.div_);
|
||||||
#endif
|
#endif
|
||||||
damage_div_fix(wd.damage, wd.div_);
|
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
|
// 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);
|
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;
|
break;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user