diff options
-rw-r--r-- | src/map/skill.c | 6 | ||||
-rw-r--r-- | src/map/status.c | 13 |
2 files changed, 14 insertions, 5 deletions
diff --git a/src/map/skill.c b/src/map/skill.c index 9877d6255..2711b4fd4 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -790,11 +790,11 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int struct status_change_entry *sce; // Enchant Poison gives a chance to poison attacked enemies if((sce=sc->data[SC_ENCPOISON])) //Don't use sc_start since chance comes in 1/10000 rate. - status_change_start(bl,SC_POISON,sce->val2, sce->val1,0,0,0, + status_change_start(bl,SC_POISON,sce->val2, sce->val1,src->id,0,0, skill_get_time2(AS_ENCHANTPOISON,sce->val1),0); // Enchant Deadly Poison gives a chance to deadly poison attacked enemies if((sce=sc->data[SC_EDP])) - sc_start4(bl,SC_DPOISON,sce->val2, sce->val1,0,0,0, + sc_start4(bl,SC_DPOISON,sce->val2, sce->val1,src->id,0,0, skill_get_time2(ASC_EDP,sce->val1)); } } @@ -817,7 +817,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int skilllv = pc_checkskill(sd, TF_POISON); case TF_POISON: case AS_SPLASHER: - if(!sc_start(bl,SC_POISON,(4*skilllv+10),skilllv,skill_get_time2(skillid,skilllv)) + if(!sc_start2(bl,SC_POISON,(4*skilllv+10),skilllv,src->id,skill_get_time2(skillid,skilllv)) && sd && skillid==TF_POISON ) clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0); diff --git a/src/map/status.c b/src/map/status.c index 2da269239..343f7cbf7 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -6825,11 +6825,15 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_DPOISON: //Lose 10/15% of your life as long as it doesn't brings life below 25% - if (status->hp > status->max_hp>>2) - { + if (status->hp > status->max_hp>>2) { int diff = status->max_hp*(bl->type==BL_PC?10:15)/100; if (status->hp - diff < status->max_hp>>2) diff = status->hp - (status->max_hp>>2); + if( val2 && bl->type == BL_MOB ) { + struct block_list* src = map_id2bl(val2); + if( src ) + mob_log_damage((TBL_MOB*)bl,src,diff); + } status_zap(bl, diff, 0); } // fall through @@ -9151,6 +9155,11 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data) case SC_DPOISON: if (--(sce->val3) > 0) { if (!sc->data[SC_SLOWPOISON]) { + if( sce->val2 && bl->type == BL_MOB ) { + struct block_list* src = map_id2bl(sce->val2); + if( src ) + mob_log_damage((TBL_MOB*)bl,src,sce->val4); + } map_freeblock_lock(); status_zap(bl, sce->val4, 0); if (sc->data[type]) { // Check if the status still last ( can be dead since then ). |