Try this, haven't tested yet
void pc_damage_received(struct map_session_data **sd, struct block_list **src, unsigned int *hp, unsigned int *sp)
{
struct warp_delay_tick *delay_data;
if ((map_flag_gvg(sd->bl.m)) || (map_flag_gvg2(sd->bl.m))) {
return;
}
if ((delay_data = getFromMSD(*sd, 0)) == NULL) {
CREATE(delay_data,struct warp_delay_tick,1);
addToMSD(*sd,delay_data,0,true);
}
delay_data->last_hit = timer->gettick();
if (*src)
delay_data->who_hit = (*src)->type;
else
delay_data->who_hit = BL_NUL;
return;
}
Replace the pc_damage_received function with that.
Back it up first before replacing.