Отлов событий и создание объекта на точке

AlexPa1

Участник
Сообщения
292
Реакции
54
Здравствуйте, есть ли пример в каких нибудь плагинах чтобы отловить событие и создать объект на его месте?

Примерно надо чтобы на игрока было совершено событие "заморожен" то на его месте появлялось текстура.

Как проверить заморожен игрок или нет? Если "Да" то создать модель! Отловить разморожен игрок? Если да то удалить модель!

Или если игрок заморожен на 5 секунд то создать модель на его позиции на 5 секунд и после истечение времени удалить.

Какой вариант лучше и какие еще есть варианты?
 

AlexPa1

Участник
Сообщения
292
Реакции
54
Как отловить заморожен ли игрок?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,828
Реакции
5,267
@alex123pavlov, только таймером проверять состояние игрока, потому что нет такого события
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,828
Реакции
5,267
@alex123pavlov, проще модифицировать сам плагин funcommands (точнее функцию void FreezeClient(int client, int time) в его инклюде ice.sp)
 

AlexPa1

Участник
Сообщения
292
Реакции
54
Некорректное использование тега "Оффтоп"
@alex123pavlov, проще модифицировать сам плагин funcommands (точнее функцию void FreezeClient(int client, int time) в его инклюде ice.sp)
Так правильно?
C-подобный:
void FreezeClient(int client, int time)
{
    if (g_FreezeSerial[client] != 0)
    {
        UnfreezeClient(client);
        return;
    }
    SetEntityMoveType(client, MOVETYPE_NONE);
    SetEntityRenderColor(client, 0, 128, 255, 192);
    SetEntityModel(int client, const "models/props/icon.mdl";

    if (g_FreezeSound[0])
    {
        float vec[3];
        GetClientEyePosition(client, vec);
        EmitAmbientSound(g_FreezeSound, vec, client, SNDLEVEL_RAIDSIREN);
    }

    g_FreezeTime[client] = time;
    g_FreezeSerial[client] = ++ g_Serial_Gen;
    CreateTimer(1.0, Timer_Freeze, client | (g_Serial_Gen << 7), DEFAULT_TIMER_FLAGS);
}
Больше не чего не добавлял.
 
Последнее редактирование модератором:

Grey83

не пишу плагины с весны 2022
Сообщения
8,828
Реакции
5,267
@alex123pavlov, во-первых, не SetEntityModel(int client, const "models/props/icon.mdl";, а SetEntityModel(client, "models/props/icon.mdl");
А во-вторых, зачем ты меняешь модель игрока? Сначала нужно куда-то сохранить модель игрока, а потом менять.
Чтобы при разморозке (функция void UnfreezeClient(int client)) можно было поменять модель игрока на ту, что была у него до этого.

И ещё: в событии public void OnMapStart() нужно делать AddFileToDownloadsTable(путь); для файлов твоей модели и PrecacheModel("models/props/icon.mdl", true);
--- Добавлено позже ---
ну а менять модель можно функцией вроде этой:
PHP:
stock void ApplyModel(const int client, const char[] model)
{
    if(!model[0] || !IsModelPrecached(model)) return;

    SetEntityModel(client, model);
    SetEntityRenderColor(client);
}
 

AlexPa1

Участник
Сообщения
292
Реакции
54
Вот такой код добавлять? Оффтоп Я не знаю принцип сохранения данных, и что значит stock перед void ApplyModel ?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,828
Реакции
5,267
Сверху Снизу