summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/map/skill.c6
-rw-r--r--src/map/status.c13
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 ).