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

Проверка скилла на кд и обнуление кд


Kubix!

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

Привет!

Возникла проблема. Нужно после телепорта вингом или скиллом обнулять кд скилла HLIF_CHANGE

Вчера пол дня провозился, нашел вроде отвечающие за это функции, но как воплотить в реальность не додумался.

int skill_blockhomun_end(int tid, int64 tick, int id, intptr_t data)

Сама функция:


int skill_blockhomun_end(int tid, int64 tick, int id, intptr_t data)
{
struct homun_data *hd = map->id2hd(id);
if (data <= 0 || data >= MAX_SKILL)
return 0;
if (hd != NULL)
hd->blockskill[data] = 0;

return 1;
}

Не совсем понятно что такое tid & intptr_t data

Ещё есть


skill_blockpc_end

но там такая же ситуация :<

Пробовал так:


if( sd->status.hom_id )
{
uint16 idx = skill->get_index(HLIF_CHANGE);
skill->blockhomun_end(0, 0, sd->status.hom_id, idx);
}
//skill->blockhomun_end(sd-hd, 0, sd->status.hom_id, HLIF_CHANGE);
//skill->blockhomun_start(sd->hd, HLIF_CHANGE, 0);
//sd->hd->blockskill[idx] = false;

Все что закомменчено тоже испробовал.

Ничего не помогает. Ошибок нет, но и кд не обнуляется.

Помогите что ли, пока мозг не сломал х)

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

Проверку нужно вписать в clif_parse_UseSkillToId


uint16 idx = skill_get_index(HLIF_CHANGE);
struct homun_data *hd = sd->hd;

if (skill_id == AL_TELEPORT) {
hd->blockskill[idx] = 0;
}

Заранее извиняюсь если где напутал, сижу с телефона, к ПК пока нет возможности подойти.

Под rAthena.

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

Проверку нужно вписать в clif_parse_UseSkillToId


uint16 idx = skill_get_index(HLIF_CHANGE);
struct homun_data *hd = sd->hd;

if (skill_id == AL_TELEPORT) {
hd->blockskill[idx] = 0;
}

Заранее извиняюсь если где напутал, сижу с телефона, к ПК пока нет возможности подойти.

Под rAthena.

Спасибо! Забыл указать что нужно под Hercules.

С Functor'ом решили проблему. В геркулесе нельзя сбросить гому 1 скилл. Задержка общая на все скиллы :<

В ../src/map/pc.c функция pc_setpos, перед

 sd->state.changemap = (sd->mapindex != map_index);

пишем:


if (sd->hd != NULL)
{
sd->hd->ud.canact_tick = 0;
}

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

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