Показать сообщение отдельно
  (#1) Старый
Azazel Azazel вне форума
Администратор
 
Имя: Виктор (Victor)
Сообщений: 18
Регистрация: 22.11.2018
Родина:
Адрес: Vitebsk
Возраст: 19
STEAM: STEAM_0:0:124323502
Профиль STEAM
18 Исправление лестниц - 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. А удаляется это "коробка" только в двух местах: когда она создалась неправильно или когда игрок закончил передвигаться по лестнице. Теперь же, эта коробка будет удаляться при смерти игрока, если это возможно.

Последний раз редактировалось Azazel; 11.06.2019 в 23:27..
Ответить с цитированием