Перейти к содержанию

Skill devotion


Extez1

Рекомендуемые сообщения

Новый фикс убил просто, рефлект не превышает макс хп чара. Вернул рефлект картам и прочему, но на нитку по прежнему идёт макс хп чара.

Сколько не копаюсь в сорцах в нитке, ни где не могу найти fix dmg на нитке.

Сталкивался кто?

p.s. reflect_damage_fix я поправил, но на нитку не пашет.

Чтоб меньше вопросов было char_n(max_hp=300k) на нитке палом. По char_n бьют азуру = 999к, то палу рефлектит max_hp.

Изменено пользователем Extez1
Ссылка на комментарий
Поделиться на другие сайты

рефлект не превышает макс хп чара

ЭТО КАК???


int battle_calc_return_damage
***************
***************
max_damage = status_get_max_hp(bl); // меняем на INT_MAX получаем нормальный рефлект от (карт,шмота,рефлектшилд).
Но на нитку по прежнему не пашет, всё так же максимальный урон идёт max_hp чара который на нитке(допустем вместо 999к)

Ссылка на комментарий
Поделиться на другие сайты

Мб if( rdamage > max_damage ) rdamage = max_damage;

Шмот нормально рефлектит. А вот нитка(devotion) не хочет. В приципе щас гляну:)

Изменено пользователем Extez1
Ссылка на комментарий
Поделиться на другие сайты

Мб if( rdamage > max_damage ) rdamage = max_damage;

Шмот нормально рефлектит. А вот нитка(devotion) не хочет. В приципе щас гляну:)


int battle_calc_return_damage(struct block_list* bl, int damage, int flag)
{
struct map_session_data* sd = NULL;
int rdamage = 0, max_damage;

sd = BL_CAST(BL_PC, bl);

if( battle_config.reflect_damage_fix&3 )
max_damage = INT_MAX; // No limit

//Bounces back part of the damage.
if (flag & BF_SHORT) {
struct status_change* sc;
if (sd && sd->short_weapon_damage_return)
{
rdamage += damage * sd->short_weapon_damage_return / 100;
rdamage = cap_value(rdamage,1,max_damage);
}
sc = status_get_sc(bl);
if (sc && sc->data[SC_REFLECTSHIELD])
{
rdamage += damage * sc->data[SC_REFLECTSHIELD]->val2 / 100;
rdamage = cap_value(rdamage,1,max_damage);
}
} else {
if (sd && sd->long_weapon_damage_return)
{
rdamage += damage * sd->long_weapon_damage_return / 100;
rdamage = cap_value(rdamage,1,max_damage);
}
}
return rdamage;
}

Ссылка на комментарий
Поделиться на другие сайты

rdamage = cap_value(rdamage,1,max_damage);

но она на прямую зависит от max_damage

В том и прикол, сначало вальки и всё проочее рефлектило 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;


Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика