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

AlexPa1

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

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

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

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

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

trial

Участник
Сообщения
51
Реакции
11
Тут нужно знать что за сервер и из-за чего происходит заморозка.
Можно, к примеру, сделать повторяющийся таймер для каждого игрока и отслеживать через getentitymovetype его состояние (movetype_none), если он, конечно же, замораживается таким образом.
Если заморожен, то можно создать prop_ragdoll и дать ему модель игрока (получить текущую модель, установить модель на созданный prop), потом через таймер удалить проп.
 

AlexPa1

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

Grey83

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

trial

Участник
Сообщения
51
Реакции
11
Как отловить заморожен ли игрок?
Ещё раз: нужно знать как он замораживается, чтобы это отлавливать.
Ему может быть поставлен MOVETYPE_NONE, его может каждую миллисекунду телепортировать на ту же позицию, где он был до этого, его могут в землю вкопать, и так далее, и тому подобное
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,517
Реакции
4,979
@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,517
Реакции
4,979
@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,517
Реакции
4,979
Сверху Снизу