- Simplified ASC_BREAKER by making it a BF_WEAPON attack with an additional int-based damage component (which is added right before elemental modifiers).
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@6760 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
564a148eeb
commit
7ff7ce4a39
@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
|
|||||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
2006/05/25
|
2006/05/25
|
||||||
|
* Simplified ASC_BREAKER by making it a BF_WEAPON attack with an additional
|
||||||
|
int-based damage component (which is added right before elemental
|
||||||
|
modifiers) as described by AuronX. Pending further refining. [Skotlex]
|
||||||
* Resolved differences between Stable/Trunk msg_athena.conf. [Lupus]
|
* Resolved differences between Stable/Trunk msg_athena.conf. [Lupus]
|
||||||
Fixed atcommand @request MSG numbers accordinly.
|
Fixed atcommand @request MSG numbers accordinly.
|
||||||
On adding new MSG strings, plzm reserve them in STABLE msg_athena.conf, too
|
On adding new MSG strings, plzm reserve them in STABLE msg_athena.conf, too
|
||||||
|
@ -399,8 +399,8 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
|
|||||||
|
|
||||||
if(flag&BF_LONG && map_getcell(bl->m, bl->x, bl->y, CELL_CHKPNEUMA) &&
|
if(flag&BF_LONG && map_getcell(bl->m, bl->x, bl->y, CELL_CHKPNEUMA) &&
|
||||||
((flag&BF_WEAPON && skill_num != NPC_GUIDEDATTACK) ||
|
((flag&BF_WEAPON && skill_num != NPC_GUIDEDATTACK) ||
|
||||||
(flag&BF_MISC && skill_num != PA_PRESSURE) ||
|
(flag&BF_MISC && skill_num != PA_PRESSURE)
|
||||||
(flag&BF_MAGIC && skill_num == ASC_BREAKER))){ // It should block only physical part of Breaker! [Lupus], on the contrary, players all over the boards say it completely blocks Breaker x.x' [Skotlex]
|
)){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -474,7 +474,6 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
|
|||||||
//Now damage increasing effects
|
//Now damage increasing effects
|
||||||
if(sc->data[SC_AETERNA].timer!=-1 && skill_num != PA_PRESSURE && skill_num != PF_SOULBURN){
|
if(sc->data[SC_AETERNA].timer!=-1 && skill_num != PA_PRESSURE && skill_num != PF_SOULBURN){
|
||||||
damage<<=1;
|
damage<<=1;
|
||||||
if (skill_num != ASC_BREAKER || flag & BF_MAGIC) //Only end it on the second attack of breaker. [Skotlex]
|
|
||||||
status_change_end( bl,SC_AETERNA,-1 );
|
status_change_end( bl,SC_AETERNA,-1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1985,6 +1984,9 @@ static struct Damage battle_calc_weapon_attack(
|
|||||||
if(skill_num==TF_POISON)
|
if(skill_num==TF_POISON)
|
||||||
ATK_ADD(15*skill_lv);
|
ATK_ADD(15*skill_lv);
|
||||||
|
|
||||||
|
if(skill_num==ASC_BREAKER) //Breaker's int-based damage.
|
||||||
|
ATK_ADD(rand()%500 + 500 + skill_lv * status_get_int(src) * 5);
|
||||||
|
|
||||||
if ((sd && (skill_num || !battle_config.pc_attack_attr_none)) ||
|
if ((sd && (skill_num || !battle_config.pc_attack_attr_none)) ||
|
||||||
(md && (skill_num || !battle_config.mob_attack_attr_none)) ||
|
(md && (skill_num || !battle_config.mob_attack_attr_none)) ||
|
||||||
(pd && (skill_num || !battle_config.pet_attack_attr_none)))
|
(pd && (skill_num || !battle_config.pet_attack_attr_none)))
|
||||||
@ -2373,9 +2375,6 @@ struct Damage battle_calc_magic_attack(
|
|||||||
else if (s_ele == -2) //Use status element
|
else if (s_ele == -2) //Use status element
|
||||||
s_ele = status_get_attack_sc_element(src);
|
s_ele = status_get_attack_sc_element(src);
|
||||||
|
|
||||||
if (skill_num == ASC_BREAKER) // Soul Breaker's magical part is neutral, although pl=-1 for the physical part to take weapon element
|
|
||||||
s_ele = 0;
|
|
||||||
|
|
||||||
//Set miscellaneous data that needs be filled
|
//Set miscellaneous data that needs be filled
|
||||||
if(sd) {
|
if(sd) {
|
||||||
sd->state.arrow_atk = 0;
|
sd->state.arrow_atk = 0;
|
||||||
@ -2422,7 +2421,6 @@ struct Damage battle_calc_magic_attack(
|
|||||||
flag.elefix = 0;
|
flag.elefix = 0;
|
||||||
break;
|
break;
|
||||||
case PR_ASPERSIO:
|
case PR_ASPERSIO:
|
||||||
case ASC_BREAKER:
|
|
||||||
flag.imdef = 1;
|
flag.imdef = 1;
|
||||||
case PF_SOULBURN: //Does not ignores mdef
|
case PF_SOULBURN: //Does not ignores mdef
|
||||||
flag.elefix = 0;
|
flag.elefix = 0;
|
||||||
@ -2486,9 +2484,6 @@ struct Damage battle_calc_magic_attack(
|
|||||||
} else
|
} else
|
||||||
ad.damage = tsd->status.sp * 2;
|
ad.damage = tsd->status.sp * 2;
|
||||||
break;
|
break;
|
||||||
case ASC_BREAKER:
|
|
||||||
ad.damage = rand()%500 + 500 + skill_lv * status_get_int(src) * 5;
|
|
||||||
break;
|
|
||||||
case HW_GRAVITATION:
|
case HW_GRAVITATION:
|
||||||
ad.damage = 200+200*skill_lv;
|
ad.damage = 200+200*skill_lv;
|
||||||
break;
|
break;
|
||||||
|
@ -1704,7 +1704,6 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds
|
|||||||
struct status_change *sc;
|
struct status_change *sc;
|
||||||
struct map_session_data *sd=NULL, *tsd=NULL;
|
struct map_session_data *sd=NULL, *tsd=NULL;
|
||||||
int type,lv,damage,rdamage=0;
|
int type,lv,damage,rdamage=0;
|
||||||
static int tmpdmg = 0;
|
|
||||||
|
|
||||||
if(skillid > 0 && skilllv <= 0) return 0;
|
if(skillid > 0 && skilllv <= 0) return 0;
|
||||||
|
|
||||||
@ -1944,17 +1943,6 @@ int skill_attack( int attack_type, struct block_list* src, struct block_list *ds
|
|||||||
dmg.dmotion = clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, CR_HOLYCROSS, -1, 5);
|
dmg.dmotion = clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, CR_HOLYCROSS, -1, 5);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ASC_BREAKER: // [celest]
|
|
||||||
if (attack_type&BF_WEAPON) { // the 1st attack won't really deal any damage
|
|
||||||
tmpdmg = damage; // store the temporary weapon damage
|
|
||||||
return 0; //Wait for the second iteration to do all the work below.
|
|
||||||
}
|
|
||||||
if (tmpdmg == 0 || damage == 0) // if one or both attack(s) missed, display a 'miss'
|
|
||||||
clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, 0, dmg.div_, skillid, skilllv, type);
|
|
||||||
damage += tmpdmg; // add weapon and magic damage
|
|
||||||
tmpdmg = 0; // clear the temporary weapon damage
|
|
||||||
dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skillid, skilllv, type);
|
|
||||||
break;
|
|
||||||
case NPC_SELFDESTRUCTION:
|
case NPC_SELFDESTRUCTION:
|
||||||
if(src->type==BL_PC)
|
if(src->type==BL_PC)
|
||||||
dmg.blewcount = 10;
|
dmg.blewcount = 10;
|
||||||
@ -2546,6 +2534,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s
|
|||||||
case HT_POWER:
|
case HT_POWER:
|
||||||
case TK_DOWNKICK:
|
case TK_DOWNKICK:
|
||||||
case TK_COUNTER:
|
case TK_COUNTER:
|
||||||
|
case ASC_BREAKER:
|
||||||
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
|
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -2574,11 +2563,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s
|
|||||||
if (unit_movepos(src, bl->x, bl->y, 0, 0))
|
if (unit_movepos(src, bl->x, bl->y, 0, 0))
|
||||||
clif_slide(src,bl->x,bl->y);
|
clif_slide(src,bl->x,bl->y);
|
||||||
break;
|
break;
|
||||||
case ASC_BREAKER: /* ƒ\ƒEƒ‹ƒuƒŒ?ƒJ? */ // [DracoRPG]
|
|
||||||
// Separate weapon and magic attacks
|
|
||||||
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
|
|
||||||
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SN_SHARPSHOOTING: /* ƒVƒƒ?ƒvƒVƒ…?ƒeƒBƒ“ƒO */
|
case SN_SHARPSHOOTING: /* ƒVƒƒ?ƒvƒVƒ…?ƒeƒBƒ“ƒO */
|
||||||
// Does it stop if touch an obstacle? it shouldn't shoot trough walls
|
// Does it stop if touch an obstacle? it shouldn't shoot trough walls
|
||||||
|
Loading…
x
Reference in New Issue
Block a user