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

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

Привет, есть вопрос по quest.c

В общем, когда у игрока есть квест на убийство несколько монстров, то в анонс высвечивается только последний (при убийстве)

Т.е. берем квест:

Убить 20 Vanberk и 20 Isilla.

Убиваем одну Isilla, в анонс высвечивается - "Isilla [1/20]". Убиваем одного Vanberk в анонс высвечивается тоже самое, "Isilla [1/20]". Но при нажатии alt+u отображается нормально.

Можно как-то в анонс пихнуть всех монстров. Т.е. чтоб писало "Vanberk - [1/20] Isilla [1/20]"

Нашел такой кусок в quest.c, но сам не додумался как это сделать. Может кто помочь ?) В долгу не останусь :)


void quest_update_objective(TBL_PC *sd, int mob)
{
int i, j;
for( i = 0; i < sd->avail_quests; i++ ) {
struct quest_db *qi = NULL;
if( sd->quest_log[i].state != Q_ACTIVE ) // Skip inactive quests
continue;
qi = quest_search(sd->quest_log[i].quest_id);
for( j = 0; j < qi->num_objectives; j++ ) {
if( qi->mob[j] == mob && sd->quest_log[i].count[j] < qi->count[j] ) {
sd->quest_log[i].count[j]++;
sd->save_quest = true;
clif_quest_update_objective(sd, &sd->quest_log[i]);
}
}
}
}

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

Дело в том, что сервер не генерирует строку, а только посылает данные клиенту.

А клиент обновляет информацию в окне и показывает уведомление.

Чтобы реализовать идею, необходимо:

- хексить EXE для отключения стандартного уведомления

- дописать код сервера, который будет генерировать строку и отображать ее с помощью clif_broadcast

Какой EXE используете? Подскажу место для патча.

6wy9fcwzghehmduzg.jpg

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

Открываем ../src/map/clif.c и в конце тела функции clif_quest_update_objective добавляем:


if (qi->num_objectives > 0)
{
char broadcast_str[CHAT_SIZE_MAX];

for (i = 0, len = 0; i < qi->num_objectives; ++i)
{
struct mob_db* mob = mob_db(qi->mob[i]);
char* delimiter = ((i == 0) ? "" : " ");

len += sprintf(&broadcast_str[len], "%s%s [ %d / %d ]", delimiter, mob->name, qd->count[i], qi->count[i]);
}

clif_broadcast(&sd->bl, broadcast_str, (len + 1), BC_DEFAULT, SELF);
}

offset 4107E2 меняем 56 8D 47 08 66 на EB 16 90 90 66

Если не сойдутся изначальные байты, то попробуйте найти offset поиском или выложите EXE.

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

Два чая этому господину. Щас винда установится пойду проверять.

EXE. В общем, появились проблемы xD Уведомления отключились, но многое перестало работать)

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

http://www.mediafire...b632ccu43d335p4

Пробуйте. Если что-то перестало работать - опишите, что именно.

Ну тех проблем которые были когда я хексил теперь нет. Осталась одна проблема, при входе в игру выписывает:

http://gyazo.com/f13070126327eb110308a1da7801b893

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

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