summaryrefslogtreecommitdiff
path: root/src/map/battle.c
diff options
context:
space:
mode:
authorshennetsind <ind@henn.et>2013-09-25 09:07:33 -0300
committershennetsind <ind@henn.et>2013-09-25 09:07:33 -0300
commit13afb7e0bf35bacc9c90c7dffe34120ddd2fd099 (patch)
tree180c739ac69aceab8ce4cc6151030539a32ac8c3 /src/map/battle.c
parent1114eb3da58b078258a824424fef687a1ccee90c (diff)
parent66979ef89363c03e3cc02d63feb5248836daff4e (diff)
downloadhercules-13afb7e0bf35bacc9c90c7dffe34120ddd2fd099.tar.gz
hercules-13afb7e0bf35bacc9c90c7dffe34120ddd2fd099.tar.bz2
hercules-13afb7e0bf35bacc9c90c7dffe34120ddd2fd099.tar.xz
hercules-13afb7e0bf35bacc9c90c7dffe34120ddd2fd099.zip
Merge branch 'master' of https://github.com/HerculesWS/Hercules
Conflicts: src/map/chrif.c src/map/clif.c src/map/homunculus.c src/map/pet.c src/map/script.c src/map/skill.c src/map/status.c All clear.
Diffstat (limited to 'src/map/battle.c')
-rw-r--r--src/map/battle.c130
1 files changed, 64 insertions, 66 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index a8022ea84..7900581c6 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -604,32 +604,31 @@ int64 battle_calc_sizefix(struct map_session_data *sd, int64 damage, int type, i
/*==========================================
* Passive skill damages increases
*------------------------------------------*/
-int64 battle_addmastery(struct map_session_data *sd,struct block_list *target,int64 dmg,int type)
-{
- int64 damage,skill;
+int64 battle_addmastery(struct map_session_data *sd,struct block_list *target,int64 dmg,int type) {
+ int64 damage;
struct status_data *status = iStatus->get_status_data(target);
- int weapon;
+ int weapon, skill_lv;
damage = dmg;
nullpo_ret(sd);
- if((skill = pc->checkskill(sd,AL_DEMONBANE)) > 0 &&
+ if((skill_lv = pc->checkskill(sd,AL_DEMONBANE)) > 0 &&
target->type == BL_MOB && //This bonus doesnt work against players.
(battle->check_undead(status->race,status->def_ele) || status->race==RC_DEMON) )
- damage += (int)(skill*(3+sd->status.base_level/20.0));
- //damage += (skill * 3);
- if( (skill = pc->checkskill(sd, RA_RANGERMAIN)) > 0 && (status->race == RC_BRUTE || status->race == RC_PLANT || status->race == RC_FISH) )
- damage += (skill * 5);
- if( (skill = pc->checkskill(sd,NC_RESEARCHFE)) > 0 && (status->def_ele == ELE_FIRE || status->def_ele == ELE_EARTH) )
- damage += (skill * 10);
+ damage += (int)(skill_lv*(3+sd->status.base_level/20.0));
+ //damage += (skill_lv * 3);
+ if( (skill_lv = pc->checkskill(sd, RA_RANGERMAIN)) > 0 && (status->race == RC_BRUTE || status->race == RC_PLANT || status->race == RC_FISH) )
+ damage += (skill_lv * 5);
+ if( (skill_lv = pc->checkskill(sd,NC_RESEARCHFE)) > 0 && (status->def_ele == ELE_FIRE || status->def_ele == ELE_EARTH) )
+ damage += (skill_lv * 10);
if( pc_ismadogear(sd) )
damage += 20 + 20 * pc->checkskill(sd, NC_MADOLICENCE);
#ifdef RENEWAL
- if( (skill = pc->checkskill(sd,BS_WEAPONRESEARCH)) > 0 )
- damage += (skill * 2);
+ if( (skill_lv = pc->checkskill(sd,BS_WEAPONRESEARCH)) > 0 )
+ damage += (skill_lv * 2);
#endif
- if((skill = pc->checkskill(sd,HT_BEASTBANE)) > 0 && (status->race==RC_BRUTE || status->race==RC_INSECT) ) {
- damage += (skill * 4);
+ if((skill_lv = pc->checkskill(sd,HT_BEASTBANE)) > 0 && (status->race==RC_BRUTE || status->race==RC_INSECT) ) {
+ damage += (skill_lv * 4);
if (sd->sc.data[SC_SOULLINK] && sd->sc.data[SC_SOULLINK]->val2 == SL_HUNTER)
damage += sd->status.str;
}
@@ -638,75 +637,74 @@ int64 battle_addmastery(struct map_session_data *sd,struct block_list *target,in
weapon = sd->weapontype1;
else
weapon = sd->weapontype2;
- switch(weapon)
- {
+ switch(weapon) {
case W_1HSWORD:
#ifdef RENEWAL
- if((skill = pc->checkskill(sd,AM_AXEMASTERY)) > 0)
- damage += (skill * 3);
+ if((skill_lv = pc->checkskill(sd,AM_AXEMASTERY)) > 0)
+ damage += (skill_lv * 3);
#endif
case W_DAGGER:
- if((skill = pc->checkskill(sd,SM_SWORD)) > 0)
- damage += (skill * 4);
- if((skill = pc->checkskill(sd,GN_TRAINING_SWORD)) > 0)
- damage += skill * 10;
+ if((skill_lv = pc->checkskill(sd,SM_SWORD)) > 0)
+ damage += (skill_lv * 4);
+ if((skill_lv = pc->checkskill(sd,GN_TRAINING_SWORD)) > 0)
+ damage += skill_lv * 10;
break;
case W_2HSWORD:
#ifdef RENEWAL
- if((skill = pc->checkskill(sd,AM_AXEMASTERY)) > 0)
- damage += (skill * 3);
+ if((skill_lv = pc->checkskill(sd,AM_AXEMASTERY)) > 0)
+ damage += (skill_lv * 3);
#endif
- if((skill = pc->checkskill(sd,SM_TWOHAND)) > 0)
- damage += (skill * 4);
+ if((skill_lv = pc->checkskill(sd,SM_TWOHAND)) > 0)
+ damage += (skill_lv * 4);
break;
case W_1HSPEAR:
case W_2HSPEAR:
- if((skill = pc->checkskill(sd,KN_SPEARMASTERY)) > 0) {
+ if((skill_lv = pc->checkskill(sd,KN_SPEARMASTERY)) > 0) {
if(pc_isridingdragon(sd))
- damage += (skill * 10);
+ damage += (skill_lv * 10);
else if(pc_isriding(sd))
- damage += (skill * 5);
+ damage += (skill_lv * 5);
else
- damage += (skill * 4);
+ damage += (skill_lv * 4);
}
break;
case W_1HAXE:
case W_2HAXE:
- if((skill = pc->checkskill(sd,AM_AXEMASTERY)) > 0)
- damage += (skill * 3);
- if((skill = pc->checkskill(sd,NC_TRAININGAXE)) > 0)
- damage += (skill * 5);
+ if((skill_lv = pc->checkskill(sd,AM_AXEMASTERY)) > 0)
+ damage += (skill_lv * 3);
+ if((skill_lv = pc->checkskill(sd,NC_TRAININGAXE)) > 0)
+ damage += (skill_lv * 5);
break;
case W_MACE:
case W_2HMACE:
- if((skill = pc->checkskill(sd,PR_MACEMASTERY)) > 0)
- damage += (skill * 3);
- if((skill = pc->checkskill(sd,NC_TRAININGAXE)) > 0)
- damage += (skill * 5);
+ if((skill_lv = pc->checkskill(sd,PR_MACEMASTERY)) > 0)
+ damage += (skill_lv * 3);
+ if((skill_lv = pc->checkskill(sd,NC_TRAININGAXE)) > 0)
+ damage += (skill_lv * 5);
break;
case W_FIST:
- if((skill = pc->checkskill(sd,TK_RUN)) > 0)
- damage += (skill * 10);
+ if((skill_lv = pc->checkskill(sd,TK_RUN)) > 0)
+ damage += (skill_lv * 10);
// No break, fallthrough to Knuckles
case W_KNUCKLE:
- if((skill = pc->checkskill(sd,MO_IRONHAND)) > 0)
- damage += (skill * 3);
+ if((skill_lv = pc->checkskill(sd,MO_IRONHAND)) > 0)
+ damage += (skill_lv * 3);
break;
case W_MUSICAL:
- if((skill = pc->checkskill(sd,BA_MUSICALLESSON)) > 0)
- damage += (skill * 3);
+ if((skill_lv = pc->checkskill(sd,BA_MUSICALLESSON)) > 0)
+ damage += (skill_lv * 3);
break;
case W_WHIP:
- if((skill = pc->checkskill(sd,DC_DANCINGLESSON)) > 0)
- damage += (skill * 3);
+ if((skill_lv = pc->checkskill(sd,DC_DANCINGLESSON)) > 0)
+ damage += (skill_lv * 3);
break;
case W_BOOK:
- if((skill = pc->checkskill(sd,SA_ADVANCEDBOOK)) > 0)
- damage += (skill * 3);
+ if((skill_lv = pc->checkskill(sd,SA_ADVANCEDBOOK)) > 0)
+ damage += (skill_lv * 3);
break;
case W_KATAR:
- if((skill = pc->checkskill(sd,AS_KATAR)) > 0)
- damage += (skill * 3);
+ if((skill_lv = pc->checkskill(sd,AS_KATAR)) > 0)
+ damage += (skill_lv * 3);
break;
}
@@ -716,8 +714,8 @@ int64 battle_addmastery(struct map_session_data *sd,struct block_list *target,in
/*==========================================
* Calculates ATK masteries.
*------------------------------------------*/
-int64 battle_calc_masteryfix(struct block_list *src, struct block_list *target, uint16 skill_id, uint16 skill_lv, int64 damage, int div, bool left, bool weapon){
- int skill, i;
+int64 battle_calc_masteryfix(struct block_list *src, struct block_list *target, uint16 skill_id, uint16 skill_lv, int64 damage, int div, bool left, bool weapon) {
+ int skill2_lv, i;
struct status_change *sc;
struct map_session_data *sd;
struct status_data *tstatus;
@@ -742,12 +740,12 @@ int64 battle_calc_masteryfix(struct block_list *src, struct block_list *target,
case CR_ACIDDEMONSTRATION:
return damage;
case NJ_SYURIKEN:
- if( (skill = pc->checkskill(sd,NJ_TOBIDOUGU)) > 0
+ if( (skill2_lv = pc->checkskill(sd,NJ_TOBIDOUGU)) > 0
#ifndef RENEWAL
&& weapon
#endif
)
- damage += 3 * skill;
+ damage += 3 * skill2_lv;
break;
#ifndef RENEWAL
case NJ_KUNAI:
@@ -807,17 +805,17 @@ int64 battle_calc_masteryfix(struct block_list *src, struct block_list *target,
damage += div * sd->spiritball * 3;
if( skill_id != CR_SHIELDBOOMERANG ) // Only Shield boomerang doesn't takes the Star Crumbs bonus.
damage += div * (left ? sd->left_weapon.star : sd->right_weapon.star);
- if( skill_id != MC_CARTREVOLUTION && (skill=pc->checkskill(sd,BS_HILTBINDING)) > 0 )
+ if( skill_id != MC_CARTREVOLUTION && (skill2_lv=pc->checkskill(sd,BS_HILTBINDING)) > 0 )
damage += 4;
- if(sd->status.party_id && (skill=pc->checkskill(sd,TK_POWER)) > 0){
+ if(sd->status.party_id && (skill2_lv=pc->checkskill(sd,TK_POWER)) > 0) {
if( (i = party_foreachsamemap(party->sub_count, sd, 0)) > 1 )
- damage += 2 * skill * i * (damage /*+ unknown value*/) / 100 /*+ unknown value*/;
+ damage += 2 * skill2_lv * i * (damage /*+ unknown value*/) / 100 /*+ unknown value*/;
}
#else
if( skill_id != ASC_BREAKER && weapon ) // Adv Katar Mastery is does not applies to ASC_BREAKER, but other masteries DO apply >_>
- if( sd->status.weapon == W_KATAR && (skill=pc->checkskill(sd,ASC_KATAR)) > 0 )
- damage += damage * (10 + 2 * skill) / 100;
+ if( sd->status.weapon == W_KATAR && (skill2_lv=pc->checkskill(sd,ASC_KATAR)) > 0 )
+ damage += damage * (10 + 2 * skill2_lv) / 100;
#endif
// percentage factor masteries
@@ -825,18 +823,18 @@ int64 battle_calc_masteryfix(struct block_list *src, struct block_list *target,
i = 2; //Star anger
else
ARR_FIND(0, MAX_PC_FEELHATE, i, iStatus->get_class(target) == sd->hate_mob[i]);
- if ( i < MAX_PC_FEELHATE && (skill=pc->checkskill(sd,sg_info[i].anger_id)) && weapon ){
+ if ( i < MAX_PC_FEELHATE && (skill2_lv=pc->checkskill(sd,sg_info[i].anger_id)) && weapon ) {
int ratio = sd->status.base_level + status_get_dex(src) + status_get_luk(src);
if ( i == 2 ) ratio += status_get_str(src); //Star Anger
- if (skill < 4 )
- ratio /= (12 - 3 * skill);
+ if (skill2_lv < 4 )
+ ratio /= (12 - 3 * skill2_lv);
damage += damage * ratio / 100;
}
if( sd->status.class_ == JOB_ARCH_BISHOP_T || sd->status.class_ == JOB_ARCH_BISHOP ){
- if((skill = pc->checkskill(sd,AB_EUCHARISTICA)) > 0 &&
+ if((skill2_lv = pc->checkskill(sd,AB_EUCHARISTICA)) > 0 &&
(tstatus->race == RC_DEMON || tstatus->def_ele == ELE_DARK) )
- damage += damage * skill / 100;
+ damage += damage * skill2_lv / 100;
}
return damage;
@@ -3176,7 +3174,7 @@ void battle_consume_ammo(TBL_PC*sd, int skill_id, int lv) {
if (!battle_config.arrow_decrement)
return;
- if (skill) {
+ if (skill_id) {
qty = skill->get_ammo_qty(skill_id, lv);
if (!qty) qty = 1;
}