diff options
Diffstat (limited to 'src/map/skill.c')
-rw-r--r-- | src/map/skill.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/map/skill.c b/src/map/skill.c index daf0abc04..ff75a71f9 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -4937,18 +4937,23 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case NPC_EMOTION_ON: case NPC_EMOTION: - if(md && md->skillidx >= 0) + //va[0] is the emotion to use. + //NPC_EMOTION & NPC_EMOTION_ON can change a mob's mode 'permanently' [Skotlex] + //val[1] 'sets' the mode + //val[2] adds to the current mode + //val[3] removes from the current mode + //val[4] if set, asks to delete the previous mode change. + if(md && md->skillidx >= 0 && tsc) { - clif_emotion(&md->bl,md->db->skill[md->skillidx].val[0]); - if(!md->special_state.ai && - (md->db->skill[md->skillidx].val[1] || md->db->skill[md->skillidx].val[2])) - //NPC_EMOTION & NPC_EMOTION_ON can change a mob's mode 'permanently' [Skotlex] - //val[1] 'sets' the mode, val[2] can add/remove from the current mode based on skill used: - //NPC_EMOTION_ON adds a mode / NPC_EMOTION removes it. + clif_emotion(bl, md->db->skill[md->skillidx].val[0]); + if(md->db->skill[md->skillidx].val[4] && tsc->data[type].timer != -1) + status_change_end(bl, type, -1); + + if(md->db->skill[md->skillidx].val[1] || md->db->skill[md->skillidx].val[2]) sc_start4(src, type, 100, skilllv, md->db->skill[md->skillidx].val[1], - skillid==NPC_EMOTION_ON?md->db->skill[md->skillidx].val[2]:0, - skillid==NPC_EMOTION ?md->db->skill[md->skillidx].val[2]:0, + md->db->skill[md->skillidx].val[2], + md->db->skill[md->skillidx].val[3], skill_get_time(skillid, skilllv)); } break; |