diff options
Diffstat (limited to 'src/map/battle.c')
-rw-r--r-- | src/map/battle.c | 70 |
1 files changed, 64 insertions, 6 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index 3292f55ee..3ca8480b4 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2119,6 +2119,52 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo case LG_HESPERUSLIT: skillratio += 120 * skill_lv - 100; break; + case SR_DRAGONCOMBO: + skillratio += 40 * skill_lv; + break; + case SR_SKYNETBLOW: + skillratio += 80 * skill_lv - 100 + ( sstatus->agi * 4 ); + break; + case SR_EARTHSHAKER: + skillratio += 50 * skill_lv - 50;// Need to code a check to make the ratio 3x when hitting a hidden player. [Rytech] + break; + case SR_FALLENEMPIRE: + skillratio += 150 * skill_lv; // Need official on how much enemy players weight affects damage. [Rytech] + //if( tsd && tsd->weight ) + // skillratio = (100 + 150 * skill_lv) * tsd->weight / 10000; + //else + // skillratio = (100 + 150 * skill_lv) * 600 / 100; + break; + case SR_TIGERCANNON: + skillratio = 2000 + ( sstatus->hp * ( 10 + 2 * skill_lv ) / 100 ); + break; + case SR_RAMPAGEBLASTER: + if( sc && sc->data[SC_EXPLOSIONSPIRITS] ) + skillratio += 40 * skill_lv * (sd?sd->spiritball_old:5) - 100; + else + skillratio += 20 * skill_lv * (sd?sd->spiritball_old:5) - 100; + break; + case SR_KNUCKLEARROW: + if( wflag&4 ) + skillratio = 150 * skill_lv; //+Knockback Damage (Must check and test. [Rytech]) + else + skillratio += 400 + (100 * skill_lv); + break; + case SR_WINDMILL: + skillratio += 150; + break; + case SR_GATEOFHELL: + skillratio += 500 * skill_lv -100; + break; + case SR_GENTLETOUCH_QUIET: + skillratio += 100 * skill_lv - 100 + sstatus->dex; + break; + case SR_HOWLINGOFLION: + skillratio += 300 * skill_lv - 100; + break; + case SR_RIDEINLIGHTNING: + skillratio += 200 * skill_lv -100; + break; } ATK_RATE(skillratio); @@ -2147,24 +2193,21 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo case NJ_SYURIKEN: ATK_ADD(4*skill_lv); break; - /** - * Ranger - **/ case RA_WUGDASH: case RA_WUGSTRIKE: case RA_WUGBITE: if(sd) ATK_ADD(30*pc_checkskill(sd, RA_TOOTHOFWUG)); break; - /** - * Royal Guard - **/ case LG_RAYOFGENESIS: if( sc && sc->data[SC_BANDING] ) {// Increase only if the RG is under Banding. short lv = (short)skill_lv; ATK_ADDRATE( 190 * ((sd) ? skill_check_pc_partner(sd,(short)skill_num,&lv,skill_get_splash(skill_num,skill_lv),0) : 1)); } break; + case SR_GATEOFHELL: + ATK_ADD (sstatus->max_hp - status_get_hp(src));//Will have to add the consumed SP part to the formula in the future. [Rytech] + break; } } //Div fix. @@ -2205,6 +2248,14 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo if( (sstatus->rhw.ele) == ELE_WIND || (sstatus->lhw.ele) == ELE_WIND ) ATK_ADDRATE(50); break; + case SR_EARTHSHAKER: + if( tsc && (tsc->data[SC_HIDING] || tsc->data[SC_CLOAKING] || tsc->data[SC_CHASEWALK] || tsc->data[SC_CLOAKINGEXCEED]) ) + ATK_ADDRATE(150+150*skill_lv); + break; + case SR_RIDEINLIGHTNING: + if( (sstatus->rhw.ele) == ELE_WIND || (sstatus->lhw.ele) == ELE_WIND ) + ATK_ADDRATE(skill_lv*5); + break; } if( sd ) @@ -3969,6 +4020,13 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t if( src != target )// Don't reflect your own damage (Grand Cross) map_foreachinshootrange(battle_damage_area,target,skill_get_splash(LG_REFLECTDAMAGE,1),BL_CHAR,tick,target,wd.amotion,wd.dmotion,rdamage,tstatus->race,0); } else { + if( tsc && tsc->data[SC_CRESCENTELBOW] ) { // Deal rdamage to src and 10% damage back to target. + clif_skill_nodamage(target,target,SR_CRESCENTELBOW_AUTOSPELL,tsc->data[SC_CRESCENTELBOW]->val1,1); + skill_blown(target,src,skill_get_blewcount(SR_CRESCENTELBOW_AUTOSPELL,tsc->data[SC_CRESCENTELBOW]->val1),unit_getdir(src),0); + status_damage(NULL,target,rdamage/10,0,0,1); + clif_damage(target, target, tick, wd.amotion, wd.dmotion, rdamage/10, wd.div_ , wd.type, wd.damage2); + status_change_end(target, SC_CRESCENTELBOW, INVALID_TIMER); + } rdelay = clif_damage(src, src, tick, wd.amotion, sstatus->dmotion, rdamage, 1, 4, 0); //Use Reflect Shield to signal this kind of skill trigger. [Skotlex] skill_additional_effect(target,src,CR_REFLECTSHIELD,1,BF_WEAPON|BF_SHORT|BF_NORMAL,ATK_DEF,tick); |