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

Арена


Break

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

Добавил новый мапфлаг noafk, написал небольшой кусок с проверкой, но не пойму куда его вставить, так чтобы на империум арене, если чар в течении минуты афк, то его оттуда кикает. Подскажите знающие люди :)

if (map[sd->bl.m].flag.noafk) {
if(DIFF_TICK(last_tick, sd->idletime) > 60){
clif_displaymessage(sd->fd, "You have been kicked from Emperium Arena because of your AFK status.");
pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,3);
}}

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

  • 1 месяц спустя...

map/map.c

найди


/// Initializes map flags and adjusts them depending on configuration.
void map_flags_init(void)

и в конец впиши свою проверку

тема была в сентябре создана, хз надо или нет уже

но пусть будет, вдруг кому-то понадобиться

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

Правильно будет конечно тогда вот-так, но не работает.

И вообще это похоже на обьявление ф-ции, которая выполняется при запуске сервера.


struct map_session_data *sd;
if (map[i].flag.noafk) {
if(DIFF_TICK(last_tick, sd->idletime) > 60){
clif_displaymessage(sd->fd, "You have been kicked from Emperium Arena because of your AFK status.");
pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,3);
}
}

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

Да, ошибся немного. 1 Месяц работаю с eA. Сейчас сам немного полазил в src

нашёл в map/pc.c в самой функции pc_setpos проверку на инициализацию персонажа.

Попробуй вставить туда. После проверки на открытие магазина, в "Misc map-changing settings"

if( map[m].flag.noafk )
{
if(DIFF_TICK(last_tick, sd->idletime) > 60)
{
clif_displaymessage(sd->fd, "You have been kicked from Emperium Arena because of your AFK status.");
return pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,3);
}
}

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

Должно работать.

Вот так попробуй.


if( map[m].flag.noafk )
{
if(DIFF_TICK(last_tick, sd->idletime) > 60)
{
clif_displaymessage(sd->fd, "You have been kicked from Emperium Arena because of your AFK status.");
return pc_setpos(sd,sd->status.save_point.map,sd->status.save_point.x,sd->status.save_point.y,3);
}
return 0;
}

Если не получиться, сделай do{}while()

PS!

А вообще можно реализовать с помощью скрипта.

Если у тебя rA то есть команда checkidle, которая выдает idle time в секундах.

Если нет, то можно выдрать ее отсюда: http://trac.rathena....t/17126/rathena

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

Я вообще думаю, что этот кусок с проверкой нужно вставить в ф-цию определения местоположения чара на карте, а не смены карты.

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

Я вообще думаю, что этот кусок с проверкой нужно вставить в ф-цию определения местоположения чара на карте, а не смены карты.

тогда в map/clif.c найди

void clif_parse_WalkToXY(int fd, struct map_session_data *sd)

и после строк sd->idletime = last_tick; впиши проверку

нашёл OnPcIdleEvent, если не получиться выше,

сделай всё по той-же схеме, только замени battleflag на mapflag

http://sushiduy.ples...dle_event.patch

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

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