В том и прикол, сначало вальки и всё проочее рефлектило max_hp чара. убрал ограничение по HP сразу норм заработало, но нитка не хочет. Ковырялся в нитке, ни чё не нашёл. if( hp && !(flag&1) ) { if( sc ) { struct status_change_entry *sce; if( src && !((battle_config.reflect_damage_fix&2) && (flag&64)) && skill != PA_PRESSURE ) { // Check for Target change defenses struct block_list *d_bl; if( (sce = sc->data[SC_DEVOTION]) ) { d_bl = map_id2bl(sce->val1); if( d_bl && ( (d_bl->type == BL_MER && ((TBL_MER*)d_bl)->master && ((TBL_MER*)d_bl)->master->bl.id == target->id) || (d_bl->type == BL_PC && ((TBL_PC*)d_bl)->devotion[sce->val2] == target->id) ) && check_distance_bl(target, d_bl, sce->val3) ) { clif_damage(d_bl, d_bl, gettick(), 0, 0, hp, 0, 0, 0); status_fix_damage(NULL, d_bl, hp, 0, 0); return 0; } status_change_end(target, SC_DEVOTION, INVALID_TIMER); } } case SC_DEVOTION: { struct block_list *d_bl; struct status_change *d_sc; if( (d_bl = map_id2bl(val1)) && (d_sc = status_get_sc(d_bl)) && d_sc->count ) { // Inherits Status From Source const enum sc_type types[] = { SC_AUTOGUARD, SC_DEFENDER, SC_REFLECTSHIELD, SC_ENDURE }; enum sc_type type2; int i = (map_flag_gvg(bl->m) || map[bl->m].flag.battleground)?2:3; while( i >= 0 ) { type2 = types[i]; if( d_sc->data[type2] ) sc_start(bl, type2, 100, d_sc->data[type2]->val1, skill_get_time(status_sc2skill(type2),d_sc->data[type2]->val1)); i--; } } break; } case SC_DEVOTION: { struct block_list *d_bl = map_id2bl(sce->val1); if( d_bl ) { if( d_bl->type == BL_PC ) ((TBL_PC*)d_bl)->devotion[sce->val2] = 0; else if( d_bl->type == BL_MER ) ((TBL_MER*)d_bl)->devotion_flag = 0; clif_devotion(d_bl, NULL); } status_change_end(bl, SC_AUTOGUARD, INVALID_TIMER); status_change_end(bl, SC_DEFENDER, INVALID_TIMER); status_change_end(bl, SC_REFLECTSHIELD, INVALID_TIMER); status_change_end(bl, SC_ENDURE, INVALID_TIMER); } break;