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

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

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

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

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

Демонстрация работы на видео.
Узнать больше об этом ресурсе...
 
Сообщения
282
Реакции
34
Помог
3 раз(а)
Seems download link is broken, is everything ok?
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
drag1c, no) there's a picture
 
  • Lol
Реакции: Murz
Сообщения
494
Реакции
341
Помог
11 раз(а)
drag1c, BiZaJe, странно, Заливал архив. Сейчас обновлю.
Пока что прикрепляю архив здесь.
 

Вложения

Сообщения
192
Реакции
148
Помог
1 раз(а)
Весьма странный код.
 
Сообщения
212
Реакции
335
Помог
3 раз(а)
А что с камерой? Почему углы не сохраняются?
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
Polarhigh, Это как? Задаю вопрос т.к имеешь лычку разраб, значит шаришь
 
Сообщения
48
Реакции
209
Помог
1 раз(а)
BiZaJe, Ну смысле как, что быстро влетает, то быстро и вылетает, как порталы в Portal работают
 

ArKaNeMaN

Квалифицированный специалист по VipModular
Сообщения
433
Реакции
293
Помог
5 раз(а)
Добавил просчёт направления и скорости игрока:
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
Сообщения
433
Реакции
293
Помог
5 раз(а)
Сообщения
11
Реакции
4
Попробуй сделать чтобы гранаты можно было закидывать в портал
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
Весьма странный код.
Что странного? Синтаксис/семантика? Код-стайл?

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

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

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

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

ArKaNeMaN

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

ArKaNeMaN

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

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

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