HALF-LIFE 2 FOREVER - Forums

HALF-LIFE 2 FOREVER - Forums (http://hl2forever.ru/forum.php)
-   Техническая поддержка (http://hl2forever.ru/forumdisplay.php?f=18)
-   -   Исправление лестниц (http://hl2forever.ru/showthread.php?t=319)

Azazel 11.06.2019 12:42

Исправление лестниц
 
Собственно сама проблема:
https://www.youtube.com/watch?v=86KY_s1q7xc
Игрок забирается на лестницу и не слезая с неё, переходит за другую команду. После этого игрок отключается от сервера. Самое интересное, что все делают так, как учащиеся, которые списывая у кого-либо допускают ошибки. Я при тестах обнаружил, что достаточно просто отключится или оборвать соединение, чтобы произошёл тайм-аут.
Valenok уже как минимум 3 раза ломал лестницы, а именно: 1 раз и ещё 1 раз после перезагрузки карты, потом через несколько дней ещё раз, за что был забанен уже на 2 недели.
Поковырявшись в Source SDK 2013, нашёл решение:
в файле hl2_player.h (примерно 280 строка) после
Код:

// HUD HINTS
void DisplayLadderHudHint();

добавить следующее
Код:

void CHL2_Player::Event_Dying(const CTakeDamageInfo& info);
в файле hl2_player.cpp (примерно 3550 строка) перед
Код:

//-----------------------------------------------------------------------------
// Purpose: Helper to remove from ladder
//-----------------------------------------------------------------------------
void CHL2_Player::ExitLadder()
{
        if ( MOVETYPE_LADDER != GetMoveType() )
                return;

добавить следующее
Код:

void CHL2_Player::Event_Dying(const CTakeDamageInfo& info)
{
        LadderMove_t* move = GetLadderMove();
        if (move != NULL)
        {
                CBaseEntity* spot = (CBaseEntity*)(move->m_hReservedSpot.Get());
                if (spot)
                {
                        UTIL_Remove(spot);
                        move->m_hReservedSpot = NULL;
                }
        }
        BaseClass::Event_Dying(info);
}

Небольшие пояснения:
Когда игрок забирается на лестницу, вокруг него создаётся некая невидимая
физическая "коробка", похожая на коробку от холодильника , которая не позволяет noclip-ться с другими игроками и позволяет "застревать", когда игрок добрался до конца лестницы. За это отвечает класс CReservePlayerSpot. А удаляется это "коробка" только в двух местах: когда она создалась неправильно или когда игрок закончил передвигаться по лестнице. Теперь же, эта коробка будет удаляться при смерти игрока, если это возможно.


Текущее время: 18:05. Часовой пояс GMT +4.

Работает на vBulletin® Версия 3.9.1-dev
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot
® 2015-2020 HALF-LIFE 2 FOREVER