[ReAPI] Portal Gun (портальная пушка)

[ReAPI] Portal Gun (портальная пушка) 0.1a

Нет прав для скачивания
Сообщения
494
Реакции
340
Помог
11 раз(а)
bizon добавил(а) новый ресурс:

[ReAPI] Portal Gun (портальная пушка) - Плагин добавляет на сервер портальную пушку

Плагин добавляет на сервер портальную пушку (как в игре Portal).
Пушку по умолчанию могут иметь игроки с указанным кваром в настройках, а также игроки, которые его купят.
Для переключения на пушку нужно выбрать нож и нажать G (drop).

Демонстрация работы на видео.
Узнать больше об этом ресурсе...
 
Сообщения
282
Реакции
34
Помог
3 раз(а)
Seems download link is broken, is everything ok?
 
Сообщения
494
Реакции
340
Помог
11 раз(а)
drag1c, BiZaJe, странно, Заливал архив. Сейчас обновлю.
Пока что прикрепляю архив здесь.
 

Вложения

Сообщения
192
Реакции
148
Помог
1 раз(а)
Весьма странный код.
 
Сообщения
203
Реакции
324
Помог
3 раз(а)
А что с камерой? Почему углы не сохраняются?
 
Сообщения
940
Реакции
188
Помог
4 раз(а)
Polarhigh, Это как? Задаю вопрос т.к имеешь лычку разраб, значит шаришь
 
Сообщения
47
Реакции
194
Помог
1 раз(а)
BiZaJe, Ну смысле как, что быстро влетает, то быстро и вылетает, как порталы в Portal работают
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
393
Реакции
283
Помог
3 раз(а)
Добавил просчёт направления и скорости игрока:
C-like:
@portal_touch(eEnt, pPlayer)
{
    if(is_nullent(eEnt) || !is_user_connected(pPlayer))
        return;
    static
        Float: fGameTime,
        Float: fNextTime;
    fGameTime = get_gametime();
    if(fNextTime < fGameTime)
    {
        new pOwner;
        pOwner = get_entvar(eEnt, var_iuser3);
        if(is_user_connected(pOwner))
        {
            new ePortalEnt;
            ePortalEnt = NULLENT;
            if(get_entvar(eEnt, var_iuser4))
            {
                if(!is_nullent(g_eUserEntPortal[pOwner][PORTAL_SECONDARY]))
                    ePortalEnt = g_eUserEntPortal[pOwner][PORTAL_SECONDARY];
            }
            else
            {
                if(!is_nullent(g_eUserEntPortal[pOwner][PORTAL_PRIMARY]))
                    ePortalEnt = g_eUserEntPortal[pOwner][PORTAL_PRIMARY];
            }
            if(is_nullent(ePortalEnt))
            {
                fNextTime = fGameTime + 1.0;
                return;
            }
            new Float: vecOriginTeleport[3];
            get_entvar(ePortalEnt, var_vuser1, vecOriginTeleport);
            if(!is_hull_vacant(vecOriginTeleport, HULL_HUMAN, pPlayer))
            {
                fNextTime = fGameTime + 1.0;
                return;
            }
            set_entvar(pPlayer, var_origin, vecOriginTeleport);
            // Получение всего что надо
            new Float:vecInAngle[3];
            get_entvar(eEnt, var_vuser2, vecInAngle);
            new Float:vecOutAngle[3];
            get_entvar(ePortalEnt, var_vuser2, vecOutAngle);
            new Float:vecPlayerVel[3];
            get_entvar(pPlayer, var_velocity, vecPlayerVel);
            new Float:vecPlayerAngle[3];
            get_entvar(pPlayer, var_angles, vecPlayerAngle);
            new Float:vecPlayerVAngle[3];
            get_entvar(pPlayer, var_v_angle, vecPlayerVAngle);
            // Просчёт и установка вектора движения игрока
            new Float:vecOutVel[3];
            Vec_GetOutVel(vecInAngle, vecOutAngle, vecPlayerVel, vecOutVel);
            set_entvar(pPlayer, var_velocity, vecOutVel);
            
            // Просчёт и установка угла поворота
            new Float:vecResAngle[3];
            Vec_GetOutAngle(vecInAngle, vecOutAngle, vecPlayerAngle, vecResAngle);
            vecResAngle[0] = vecPlayerVAngle[0];
            set_entvar(pPlayer, var_angles, vecResAngle);
            set_entvar(pPlayer, var_v_angle, vecResAngle);
            
            set_entvar(pPlayer, var_fixangle, 1);
            emit_sound(pPlayer, CHAN_STATIC, g_szPortalGunResource[PG_SND_CREATE_O], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
        }
        fNextTime = fGameTime + 1.0;
    }
}
// Получение угла поворота игрока после прохождения через портал
Vec_GetOutAngle(
    const Float:vecInAngle[3],  // Угол входного портала
    const Float:vecOutAngle[3], // Угол выходного портала
    const Float:vecSrcAngle[3], // Входной вектор движения игрока
    Float:vecResAngle[3]
) {
    for (new i = 0; i < 2; i++) {
        vecResAngle[i] = (vecSrcAngle[i] - vecInAngle[i] + vecOutAngle[i]) - 180;
    }
}
// Получение вектора движения игрока после прохождения через портал
Vec_GetOutVel(
    const Float:vecInAngle[3],  // Угол входного портала
    const Float:vecOutAngle[3], // Угол выходного портала
    const Float:vecSrcVel[3],   // Входной вектор движения игрока
    Float:vecOutVel[3]
) {
    new Float:fSrcSpeed = vector_length(vecSrcVel);
    new Float:vecSrcDir[3];
    for (new i = 0; i < 3; i++) {
        vecSrcDir[i] = -(vecSrcVel[i] / fSrcSpeed);
    }
    new Float:vecSrcAngle[3];
    vector_to_angle(vecSrcDir, vecSrcAngle);
    new Float:vecAnglesDiff[3];
    for (new i = 0; i < 3; i++) {
        vecAnglesDiff[i] = vecSrcAngle[i] - vecInAngle[i] + vecOutAngle[i];
    }
    angle_vector(vecAnglesDiff, ANGLEVECTOR_FORWARD, vecOutVel);
    for (new i = 0; i < 3; i++) {
        vecOutVel[i] *= fSrcSpeed;
    }
}
 

Вложения

Последнее редактирование:

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
393
Реакции
283
Помог
3 раз(а)
Сообщения
11
Реакции
4
Попробуй сделать чтобы гранаты можно было закидывать в портал
 
Сообщения
494
Реакции
340
Помог
11 раз(а)
Весьма странный код.
Что странного? Синтаксис/семантика? Код-стайл?

А что с камерой? Почему углы не сохраняются?
_angle и var_angles устанавливаются в зависимости от углов портала. А-ля куда "смотрит" портал, туда и смотрит игрок при выходе из него.

Ну, по-моему не хватает самого интересного, сохранения углов и скорости 👉👈
Ну велоситю я не трогаю, так что она сохраняется. На видео даже видно, что я с помощью хука влетел с большой скоростью, с такой и вылетел. Или имеется ввиду, что нужно дополнительно толчок сделать, чтобы "вылет" из портала был? А угол для удобности устанавливается. Это лучше в настройки вывести, чтоб настраивали под себя установку/сохранение угла.

ArKaNeMaN, заценю твою часть. Интересно, что изменилось.
12 Фев 2023
Попробуй сделать чтобы гранаты можно было закидывать в портал
В следующей версии добавлю. Сейчас проходят только игроки.
 
Сообщения
203
Реакции
324
Помог
3 раз(а)
_angle и var_angles устанавливаются в зависимости от углов портала. А-ля куда "смотрит" портал, туда и смотрит игрок при выходе из него.
да, я уже это заметил. Скорее всего тебе надо учитывать разницу углов взгляда игрока и входного портала, и потом после телепорта прибавлять её к углу выходного портала

Что странного? Синтаксис/семантика? Код-стайл?
мне кажется, что всё норм. Может быть его собаки @ смутили
 
Сообщения
494
Реакции
340
Помог
11 раз(а)
да, я уже это заметил. Скорее всего тебе надо учитывать разницу углов взгляда игрока и входного портала, и потом после телепорта прибавлять её к углу выходного портала
В настройках сделаю вариант не трогать углы, сделать как есть сейчас и вариант от ArKaNeMaN. То же и со скоростью. Оставляем вариативность за юзерами.
 
Сообщения
47
Реакции
194
Помог
1 раз(а)
bizon,
Вот снял видос как моя портальная пушка работает
12 Фев 2023
а ой, ну то же самое как и ArKaNeMaN выложил да
12 Фев 2023
механика стрельбы через портал была бы тоже клевой фичей!
 
Сообщения
494
Реакции
340
Помог
11 раз(а)
Polarhigh, вижу ускорение при выходов с портала. Да, я про него и говорил. А если по оси Z портал (пол/потолок), ускорение также придаётся? И есть какой-то вариант насчёт исключения замкнутой петли при входе/выходе из порталов? Я об этом думал, но пока сделал затычку в виде ограничения использования портала раз в секунду.
И также вижу клёвый расчёт при установке портала, которым я пренебрёг (изначально он был). Возможно, тоже добавлю более точный просчёт, но с возможностью включения/выключения. Многим он почему-то вообще не нужен.
12 Фев 2023
механика стрельбы через портал была бы тоже клевой фичей!
Кстати, можно заюзать трейсы для имитации атаки, а выстрел через rg_fire_bullets3. Или в TraceAttack просчёт делать. Вообще это вполне можно сделать.
 
Последнее редактирование:

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
393
Реакции
283
Помог
3 раз(а)
Сообщения
494
Реакции
340
Помог
11 раз(а)
ArKaNeMaN, в кс более прошаренные багоюзеры. Садисты вот так вот врага в петлю поймают и будут наслаждаться.
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
393
Реакции
283
Помог
3 раз(а)
Можно ещё попробовать сделать просчёт оригина относительно портала. Т.е. где коснулся входного, там и появишься у выходного... Но теперь мне уже лень думать)
 

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

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