Источник: amx-x.ru
Версия: 1.2
В этой статье мы рассмотрим использование тутор сообщений из кондишен зеро.
И так начнём, сначала добавляем в верх нашего исходника новый таск.
[pawn]
- #define TASK_HIDE_TUTOR 8800
Добавляем глобальные массивы или как их там правильно называют. (если вы хотите выставлять длительность сообщения через квар, разкомментируйте gMsgTutorTime)
[pawn]
- new gMsgTutorClose, gMsgTutorText//, gMsgTutorTime
Добавляем в plugin_init. (если вы хотите выставлять длительность сообщения через квар, разкомментируйте gMsgTutorTime)
[pawn]
- gMsgTutorClose = get_user_msgid("TutorClose")
- gMsgTutorText = get_user_msgid("TutorText")
- //gMsgTutorTime = register_cvar("msg_tutor_time", "8")
Добавляем прекреш нужных файлов.
[pawn]
- public plugin_precache()
- {
- precache_generic("gfx/career/icon_i.tga")
- precache_generic("gfx/career/icon_skulls.tga")
- precache_generic("gfx/career/round_corner_ne.tga")
- precache_generic("gfx/career/round_corner_nw.tga")
- precache_generic("gfx/career/round_corner_se.tga")
- precache_generic("gfx/career/round_corner_sw.tga")
- precache_generic("resource/TutorScheme.res")
- precache_generic("resource/UI/TutorTextWindow.res")
- precache_sound("events/enemy_died.wav")
- precache_sound("events/friend_died.wav")
- precache_sound("events/task_complete.wav")
- precache_sound("events/tutor_msg.wav")
- }
Добавляем новый сток. (если вы хотите выставлять длительность сообщения через квар, разкомментируйте gMsgTutorTime и закоментируйте строчку ниже). Объясняю условие 8.0 < 5 ? 5.0 : 8.0 данные значения отвечают как долго сообщение будет висеть на экране игрока, оба значения должны быть одинаковыми и дробными!
[pawn]
- stock Create_TutorMsg(id, iStyle, bool:bSound, szMsg[], any:...)
- {
- new szBuffer[192]
- new iArgs = numargs()
- for (new iArg = 4; iArg < iArgs; iArg++)
- {
- if (getarg(iArg) != LANG_PLAYER)
- continue;
- setarg(iArg, _, id)
- }
- vformat(szBuffer, 191, szMsg, 5)
- if (bSound)
- {
- switch(iStyle)
- {
- case 0: PlaySound(id, id, "events/tutor_msg.wav")
- case 1: PlaySound(id, id, "events/friend_died.wav")
- case 2: PlaySound(id, id, "events/enemy_died.wav")
- case 3: PlaySound(id, id, "events/tutor_msg.wav")
- case 4: PlaySound(id, id, "events/task_complete.wav")
- }
- }
- message_begin(MSG_ONE_UNRELIABLE, gMsgTutorClose, {0, 0, 0}, id)
- message_end()
- message_begin(MSG_ONE_UNRELIABLE, gMsgTutorText, {0, 0, 0}, id)
- write_string(szBuffer)
- write_byte(0)
- write_short(0)
- write_short(0)
- write_short(1<<iStyle)
- message_end()
- remove_task(TASK_HIDE_TUTOR+id)
- //set_task(get_pcvar_num(gMsgTutorTime) < 5 ? 5.0 : get_pcvar_float(gMsgTutorTime), "Remove_TutorMsg", TASK_HIDE_TUTOR+id)
- set_task(5.0 < 5 ? 5.0 : 5.0, "Remove_TutorMsg", TASK_HIDE_TUTOR+id)
- }
Добавляем функцию удаления сообщения.
[pawn]
- public Remove_TutorMsg(taskid)
- {
- new id = (taskid > TASK_HIDE_TUTOR) ? (taskid - TASK_HIDE_TUTOR) : taskid
- message_begin(MSG_ONE , gMsgTutorClose, {0, 0, 0}, id)
- message_end()
- }
Ну и последний сток, функция проигрывания звуков.
[pawn]
- stock PlaySound(const pReceiver = 0, const pSender = 0, const szSound[], const iPitch = PITCH_NORM, const bool:bReliable = false)
- {
- if (bReliable)
- {
- if (pReceiver)
- {
- message_begin(MSG_ONE, get_user_msgid("SendAudio"), _, pReceiver)
- }
- else
- {
- message_begin(MSG_ALL, get_user_msgid("SendAudio"))
- }
- }
- else
- {
- if (pReceiver)
- {
- message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SendAudio"), _, pReceiver)
- }
- else
- {
- message_begin(MSG_BROADCAST, get_user_msgid("SendAudio"))
- }
- }
- write_byte(pSender)
- write_string(szSound)
- write_short(iPitch)
- message_end()
- }
Пример создания сообщения:
[pawn]
- // Create_TutorMsg(индекс, стиль от 0 до 4, звук false - выкл true - вкл, "сообщение")
- Create_TutorMsg(id, 0, true, "Вы успешно сбросили свой счёт")
Стили:
[pawn]
- 0 - стандартный зелёный
- 1 - красный
- 2 - синий
- 3 - желтый
- 4 - зелёный, миссия выполнена.
С радостью приму пожелание о найденные ошибки, если таковые имеются. В архиве все нужные файлы, а так же sma файл со всем кодом.
История версий:
v1.0 Релиз
v1.1 Оптимизация кода.
v1.2 Добавлено ограничение на 191 байт, чтобы умные юзеры не смогли вылезти за предел массива. Добавлена поддержка аргументов, типа: %s %d и т.д. Небольшая оптимизация кода.
Благодарности: Вы должны зарегистрироваться, чтобы видеть ссылки.