Скриптер
Проверенный
Пользователь
- Сообщения
- 3,593
- Реакции
- 1,576
- Помог
- 141 раз(а)
Всем привет.
Собственно, у меня есть код, которым я скрываю прицел, и возвращаю потом обратно:
Проблема заключается в следующем: при возвращении прицела обратно, у меня появляется прицел наблюдателя вместе с ним, как будто бы я отключал еще и
Так же у меня есть другой плагин, в котором при определённых условиях отключается и включается
Держа в голове совокупность этих фактов, я полез в ReGameDLL, и вот что я обнаружил:
( ReGameDLL_CS/player.cpp at master · s1lentq/ReGameDLL_CS (github.com) )
Т.е. как я понимаю, если m_iHideHUD поменялся и это было что-то из
Пересобрав ReGameDLL с такими правками:
Теперь вопрос: там действительно не должно быть HIDEHUD_CROSSHAIR, или просто кто-то забыл его добавить?
Собственно, у меня есть код, которым я скрываю прицел, и возвращаю потом обратно:
Код:
set_member(pPlayer, m_iHideHUD, get_member(pPlayer, m_iHideHUD) | HIDEHUD_CROSSHAIR);
// ...
set_member(pPlayer, m_iHideHUD, get_member(pPlayer, m_iHideHUD) & ~HIDEHUD_CROSSHAIR);
HIDEHUD_OBSERVER_CROSSHAIR
Так же у меня есть другой плагин, в котором при определённых условиях отключается и включается
HIDEHUD_HEALTH
. И вот когда я отключаю HIDEHUD_CROSSHAIR, прицел наблюдателя появляется, потом отключаю HIDEHUD_HEALTH, прицел наблюдателя пропадает. Держа в голове совокупность этих фактов, я полез в ReGameDLL, и вот что я обнаружил:
C++:
#ifdef REGAMEDLL_FIXES
if (m_iHideHUD && !(m_iHideHUD & HIDEHUD_OBSERVER_CROSSHAIR))
{
if (m_iClientHideHUD < 0)
m_iClientHideHUD = 0;
int hudChanged = m_iClientHideHUD ^ m_iHideHUD;
if (hudChanged & (HIDEHUD_FLASHLIGHT | HIDEHUD_HEALTH | HIDEHUD_TIMER | HIDEHUD_MONEY))
{
MESSAGE_BEGIN(MSG_ONE, gmsgCrosshair, nullptr, pev);
WRITE_BYTE(0);
MESSAGE_END();
}
}
#endif
Т.е. как я понимаю, если m_iHideHUD поменялся и это было что-то из
(HIDEHUD_FLASHLIGHT | HIDEHUD_HEALTH | HIDEHUD_TIMER | HIDEHUD_MONEY)
, то отправляется мессага на скрытие прицела наблюдателя. Как видим, здесь нет HIDEHUD_CROSSHAIR, судя по всему отсюда и баг, описанный мной выше.Пересобрав ReGameDLL с такими правками:
if (hudChanged & (HIDEHUD_FLASHLIGHT | HIDEHUD_HEALTH | HIDEHUD_TIMER | HIDEHUD_MONEY | HIDEHUD_CROSSHAIR))
, баг действительно ушёл.Теперь вопрос: там действительно не должно быть HIDEHUD_CROSSHAIR, или просто кто-то забыл его добавить?