Проясните ситуацию с set_task и remove_tast

Сообщения
5
Реакции
0
Всем привет, только начинаю всем этим заниматься, потому что порой интересно посидеть что-то пописать, чтобы что-то в итоге получилось.
Не так давно, мною была найдена тема и мне стало интересно попробовать это реализовать, просто потому что интересно.

Имеется код:
Код:

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN_NAME "Call of Dute 2: Quotations of the great"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "KN"

#define SPECMODE_ALIVE 0

#define EFFECT_TASK_ID 666

#define EFFECT_SCREEN_ALPHA 230
#define EFFECT_SCREEN_FADE 2
#define EFFECT_SCREEN_R 0
#define EFFECT_SCREEN_G 0
#define EFFECT_SCREEN_B 0

new quotamassive[10][]=
{
"11111111111111111111111111111",
"22222222222222222222222222222",
"333333333333333333333333333333",
"444444444444444444444444444",
"5555555555555555555555555",
"666666666666666666666666666",
"777777777777777777777777",
"888888888888888888888888888888",
"99999999999999999999999999999999",
"1010101010101010101010101010101010"
}

public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
RegisterHam(Ham_Killed, "player", "Ham_Killed_player_Post", 1);
}

public Ham_Killed_player_Post(iPlrId, iIdattacker, iShouldGib)
{
set_hudmessage(255, 255, 255, -1.0, -1.0, 1, 3.0, 4.0, 0.1, 1.0, -1);
show_hudmessage(iPlrId, (quotamassive[random_num(0,9)]))

set_pev(iPlrId, pev_iuser1, SPECMODE_ALIVE);

return HAM_IGNORED;
}

public f_Effects(UID)
{
new szUserName2 = UID - EFFECT_TASK_ID

if(is_user_connected(szUserName2))
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, szUserName2)
write_short(1<<0) // Время затухания
write_short(1<<0) // Продолжительность показа
write_short(0x0004) // Тип затухания
write_byte(EFFECT_SCREEN_R) // Red
write_byte(EFFECT_SCREEN_G) // Green
write_byte(EFFECT_SCREEN_B) // Blue
write_byte(EFFECT_SCREEN_ALPHA) // Альфа-прозрачность
message_end()
}
}

public fAdeStart(szUserName2)
{
set_task(2.0, "f_Effects", szUserName2 + EFFECT_TASK_ID, "", 0, "b")

if(is_user_connected(szUserName2))
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, szUserName2)
write_short((1<<12) * EFFECT_SCREEN_FADE) // Время затухания
write_short(1<<12) // Продолжительность показа
write_short(0x0001) // Тип затухания
write_byte(EFFECT_SCREEN_R) // Red
write_byte(EFFECT_SCREEN_G) // Green
write_byte(EFFECT_SCREEN_B) // Blue
write_byte(EFFECT_SCREEN_ALPHA) // Альфа-прозрачность
message_end()
}
}

public fAdeEnd(szUserName2)
{
remove_task(szUserName2 + EFFECT_TASK_ID)
if(is_user_connected(szUserName2))
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, szUserName2)
write_short((1<<12) * EFFECT_SCREEN_FADE) // Время затухания
write_short((1<<12) * 1) // Продолжительность показа
write_short(0x0002) // Тип затухания
write_byte(EFFECT_SCREEN_R) // Red
write_byte(EFFECT_SCREEN_G) // Green
write_byte(EFFECT_SCREEN_B) // Blue
write_byte(EFFECT_SCREEN_ALPHA) // Альфа-прозрачность
message_end()
}
}

Суть в том, что я не могу понять как работают эти две команды. У меня начинается создаваться затухание экрана, после чего оно все также продолжается. Но я не могу ввесте set_task на то, чтобы срабатывал кусок кода на прекращение затемнения.

Была мысль поставить его в f_Effects, ведь оно вызывается спустя 2 секунды начала затухания, но почему-то ничего не происходит
Код:
set_task(5.0, "fAdeEnd", _, "", "a", "1")


И еще вопрос, как вытаскивать в случайном порядке те строки, которые идут в массиве, но только из файла для вывода в hud?
Открывать файл через fopen, потом создавать массив и через fgets помещать строку и делать ее вывод через hud?
И как понять будет ли он брать случайную строку из файла или по порядку их выводить, или это как-то можно задать?
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
Лучше опишите корректно конечную цель.

Спонтанно понатыкали функций. Исходя из кода некоторые функции вовсе не вызываются.
 
Сообщения
5
Реакции
0
wopox1337,
Имеется код, мне нужно, чтобы при смерти у клиента происходила затемнее экрана, после некоторого времени, например секунд 5, экран приходил в норму.

Спонтанно понатыкали функций. Исходя из кода некоторые функции вовсе не вызываются.
Не вижу ничего спонтанного, одна функция делать fadein, другая его продолжает до определенного момента и третья совершает fadeout. Да, функции не вызывается, хотя по сути там не хватает 1 строки на вызов fadestart в Ham_Killed_player_Post
Если принудительно вызывать fadestart и fadeend, то все работает как и должно.
Проблема в том, что я не могу понять куда мне вписать task на вызов fadeend
 
Сообщения
432
Реакции
410
Помог
14 раз(а)
Все что вам нужно это изменить первые три параметра месседжа. не нужны никакие таски.
Код:
write_short((1<<12) * EFFECT_SCREEN_FADE)    // Время затухания
write_short((1<<12) * 1) // Продолжительность показа
write_short(0x0002) // Тип затухания
 
Сообщения
2,751
Реакции
3,017
Помог
61 раз(а)
как вытаскивать в случайном порядке те строки, которые идут в массиве, но только из файла для вывода в hud?
Если файл не большой, то:
1)открываем файл
2) читаем построчно
3) каждую строку заносим в динамический массив
4) в нужном месте считываем дин. Массив указав нужную ячейку.
1 Авг 2017
Удобную работу с мессагой screenfade вы можете увидеть здесь:
http://dev-cs.ru/resources/41/field?field=source
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу