diff options
Diffstat (limited to 'src/map/skill.c')
-rw-r--r-- | src/map/skill.c | 49 |
1 files changed, 22 insertions, 27 deletions
diff --git a/src/map/skill.c b/src/map/skill.c index b3c87ddaf..d3bbb5617 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -757,11 +757,6 @@ int skill_get_range2 (struct block_list *bl, int id, int lv) return status_get_range(bl); range *=-1; } - - //Use attack range. - if(!range && !(skill_get_inf(id)&INF_SELF_SKILL)) - return status_get_range(bl); - //TODO: Find a way better than hardcoding the list of skills affected by AC_VULTURE switch (id) { case AC_SHOWER: @@ -810,7 +805,7 @@ int skill_calc_heal (struct block_list *bl, int skill_lv) if(bl->type == BL_PC && (skill = pc_checkskill((TBL_PC*)bl, HP_MEDITATIO)) > 0) heal += heal * skill * 2 / 100; - if(bl->type == BL_HOM && (skill = merc_hom_checkskill( ((TBL_HOM*)bl)->master, HLIF_BRAIN)) > 0) //[orn] + if(bl->type == BL_HOM && (skill = merc_hom_checkskill(((TBL_HOM*)bl), HLIF_BRAIN)) > 0) heal += heal * skill * 2 / 100; return heal; } @@ -1513,10 +1508,9 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list * case HVAN_EXPLOSION: if(src->type == BL_HOM){ TBL_HOM *hd = (TBL_HOM*)src; - if (hd->master) { - hd->master->homunculus.intimacy = 200; - clif_send_homdata(hd->master,0x100,hd->master->homunculus.intimacy/100); - } + hd->homunculus.intimacy = 200; + if (hd->master) + clif_send_homdata(hd->master,0x100,hd->homunculus.intimacy/100); } break; } @@ -2357,11 +2351,11 @@ static int skill_check_condition_hom (struct homun_data *hd, int skill, int lv, switch(skill) { // Check for cost reductions due to skills & SCs case HFLI_SBR44: - if(sd->homunculus.intimacy <= 200) + if(hd->homunculus.intimacy <= 200) return 0; break; case HVAN_EXPLOSION: - if(sd->homunculus.intimacy < battle_config.hvan_explosion_intimate) + if(hd->homunculus.intimacy < battle_config.hvan_explosion_intimate) return 0; break; } @@ -2752,6 +2746,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int case KN_CHARGEATK: flag = distance_bl(src, bl); + skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); + if (unit_movepos(src, bl->x, bl->y, 1, 1)) + clif_slide(src,bl->x,bl->y); + break; + case TK_JUMPKICK: skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); if (unit_movepos(src, bl->x, bl->y, 0, 0)) @@ -5440,6 +5439,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in else if (sd) clif_skill_fail(sd,skillid,0,0); break; + + case AM_CALLHOMUN: //[orn] + if (sd && !merc_call_homunculus(sd)) + clif_skill_fail(sd,skillid,0,0); + break; + case AM_REST: if (sd) { @@ -5557,7 +5562,6 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data) case WE_CALLPARTNER: case WE_CALLPARENT: case WE_CALLBABY: - case AM_CALLHOMUN: case AM_RESURRECTHOMUN: //Find a random spot to place the skill. [Skotlex] inf2 = skill_get_splash(ud->skillid, ud->skilllv); @@ -6088,7 +6092,7 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s } break; - // Slim Pitcher [Celest] (normally Condensed Potion doesn't give SP (Heals party members)) + // Slim Pitcher [Celest] case CR_SLIMPITCHER: if (sd) { int i = skilllv%11 - 1; @@ -6205,11 +6209,6 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s sc_start(src,type,100,skilllv,skill_get_time2(skillid,skilllv)); break; - case AM_CALLHOMUN: //[orn] - if (sd && !merc_call_homunculus(sd, x, y)) - clif_skill_fail(sd,skillid,0,0); - break; - case AM_RESURRECTHOMUN: //[orn] if (sd) { @@ -8298,7 +8297,7 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t zeny = 0; //Zeny is reduced on skill_attack. break; case AM_CALLHOMUN: //Can't summon if a hom is already out - if (sd->status.hom_id && !sd->homunculus.vaporize) { + if (sd->status.hom_id && sd->hd && !sd->hd->homunculus.vaporize) { clif_skill_fail(sd,skill,0,0); return 0; } @@ -8313,7 +8312,7 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t } break; case AM_RESURRECTHOMUN: // Can't resurrect homun if you don't have a dead homun - if (!sd->status.hom_id || sd->homunculus.hp) + if (!sd->status.hom_id || !sd->hd || sd->hd->homunculus.hp) { clif_skill_fail(sd,skill,0,0); return 0; @@ -9286,10 +9285,8 @@ int skill_landprotector (struct block_list *bl, va_list ap) } //Delete the rest of types. case HW_GANBANTEIN: - //Update: It deletes everything except songs/dances/encores. if(!unit->group->state.song_dance) -// if(skill_get_type(unit->group->skill_id) == BF_MAGIC) - { //Delete Magical effects + { //It deletes everything except songs/dances/encores. skill_delunit(unit, 1); return 1; } @@ -9320,10 +9317,8 @@ int skill_landprotector (struct block_list *bl, va_list ap) break; } if (unit->group->skill_id == SA_LANDPROTECTOR && - //Update: It deletes everything except songs/dances/encores. !(skill_get_inf2(skillid)&(UF_DANCE|UF_SONG|UF_ENSEMBLE))) -// skill_get_type(skillid) == BF_MAGIC) - { //Magic tile won't be activated + { //It deletes everything except songs/dances/encores. (*alive) = 0; return 1; } |