diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/map/mob.c | 7 | ||||
-rw-r--r-- | src/map/skill.c | 60 |
2 files changed, 33 insertions, 34 deletions
diff --git a/src/map/mob.c b/src/map/mob.c index 531939885..369f503f9 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -1976,13 +1976,6 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) if( sd ) { - int sp = 0, hp = 0; - sp += sd->sp_gain_value; - sp += sd->sp_gain_race[status->race]; - sp += sd->sp_gain_race[status->mode&MD_BOSS?RC_BOSS:RC_NONBOSS]; - hp += sd->hp_gain_value; - if( hp || sp ) - status_heal(src, hp, sp, battle_config.show_hp_sp_gain?2:0); if( sd->mission_mobid == md->class_) { //TK_MISSION [Skotlex] if( ++sd->mission_count >= 100 && (temp = mob_get_random_id(0, 0xE, sd->status.base_level)) ) diff --git a/src/map/skill.c b/src/map/skill.c index 880e03fd3..1942ff193 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1237,6 +1237,17 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list * status_heal(src, 0, status_get_lv(bl)*(95+15*rate)/100, 2); } + if( sd && status_isdead(bl) && attack_type&BF_WEAPON ) + { + int sp = 0, hp = 0; + sp += sd->sp_gain_value; + sp += sd->sp_gain_race[status_get_race(bl)]; + sp += sd->sp_gain_race[is_boss(bl)?RC_BOSS:RC_NONBOSS]; + hp += sd->hp_gain_value; + if( hp || sp ) + status_heal(src, hp, sp, battle_config.show_hp_sp_gain?2:0); + } + // Trigger counter-spells to retaliate against damage causing skills. if(dstsd && !status_isdead(bl) && dstsd->autospell2[0].id && !(skillid && skill_get_nk(skillid)&NK_NO_DAMAGE)) @@ -1640,34 +1651,29 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds struct block_list *tbl = bl; bl = src; src = tbl; + sd = BL_CAST(BL_PC, src); + tsd = BL_CAST(BL_PC, bl); + sc = status_get_sc(bl); + if (sc && !sc->count) + sc = NULL; //Don't need it. + + //Spirit of Wizard blocks Kaite's reflection + if( type == 2 && sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_WIZARD ) + { //It should only consume once per skill casted. Val3 is the skill id and val4 is the ID of the damage src. + //This should account for ground spells (and single target spells will be completed on castend_id) [Skotlex] + if (tsd && !(sc->data[SC_SPIRIT]->val3 == skillid && sc->data[SC_SPIRIT]->val4 == dsrc->id) ) + { //Check if you have stone to consume. + type = pc_search_inventory (tsd, 7321); + if (type >= 0) + pc_delitem(tsd, type, 1, 0); + } else + type = 0; - if( type == 2 ) - { // Kaite - sd = BL_CAST(BL_PC, src); - tsd = BL_CAST(BL_PC, bl); - - sc = status_get_sc(bl); - if (sc && !sc->count) - sc = NULL; //Don't need it. - - //Spirit of Wizard blocks Kaite's reflection - if( sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_WIZARD ) - { //It should only consume once per skill casted. Val3 is the skill id and val4 is the ID of the damage src. - //This should account for ground spells (and single target spells will be completed on castend_id) [Skotlex] - if (tsd && !(sc->data[SC_SPIRIT]->val3 == skillid && sc->data[SC_SPIRIT]->val4 == dsrc->id) ) - { //Check if you have stone to consume. - type = pc_search_inventory (tsd, 7321); - if (type >= 0) - pc_delitem(tsd, type, 1, 0); - } else - type = 0; - - if (type >= 0) { - dmg.damage = dmg.damage2 = 0; - dmg.dmg_lv = ATK_MISS; - sc->data[SC_SPIRIT]->val3 = skillid; - sc->data[SC_SPIRIT]->val4 = dsrc->id; - } + if (type >= 0) { + dmg.damage = dmg.damage2 = 0; + dmg.dmg_lv = ATK_MISS; + sc->data[SC_SPIRIT]->val3 = skillid; + sc->data[SC_SPIRIT]->val4 = dsrc->id; } } } |