Скриптер
Проверенный
Пользователь
- Сообщения
- 3,582
- Реакции
- 1,570
- Помог
- 137 раз(а)
Как можно нормально скрыть радар, чтобы остальные элементы худа при этом остались видимы?
Клиенская команда. Потом на других серверах его нет. Как показать обратно хз.Nordic Warrior, там шлется hideradar, как я уже выше говорил. Слоухакингом такое себе заниматься.
drawradarКак показать обратно хз.
Для чего?И я пытался писать drawradar, толку 0 было
Некоторые моменты с худом не учтены.А почему?
message_begin(MSG_ONE, get_user_msgid("Crosshair"), _, id)
write_byte(0)
message_end()
message_begin(MSG_ONE, get_user_msgid("CurWeapon"), _, id)
write_byte(1)
write_byte(-1)
write_byte(-1)
message_end()
m_bDrawRadar
, отражающая статус отображения радара и используемая только на клиенте через консольные команды drawradar
и hideradar
. Но перед отображением радара также и проверяется статус gHUD.m_fPlayerDead
, которая влияет не только на радар, и вот на этом моменте уже появляется проблема возможной подмены.int CHudRadar::Draw(float flTime)
{
return 0;
if ((gHUD.m_iHideHUDDisplay & HIDEHUD_HEALTH) || g_iUser1)
return 1;
if (!gHUD.m_fPlayerDead && m_bDrawRadar == true)
DrawRadar(flTime);
return 1;
}
int CHudAmmo::MsgFunc_CurWeapon(const char *pszName, int iSize, void *pbuf)
{
static wrect_t nullrc;
int fOnTarget = FALSE;
BEGIN_READ(pbuf, iSize);
int iState = READ_BYTE();
int iId = READ_BYTE();
int iClip = READ_BYTE();
if (iState > 1)
fOnTarget = TRUE;
if (iId < 1 && !m_bObserverCrosshair)
{
SetCrosshair(0, nullrc, 0, 0, 0);
return 0;
}
if (g_iUser1 != OBS_IN_EYE)
{
if ((iId == -1) && (iClip == -1))
{
gHUD.m_fPlayerDead = TRUE;
gpActiveSel = NULL;
return g_pfnMSG_CurWeapon(pszName, iSize, pbuf);
}
gHUD.m_fPlayerDead = FALSE;
}
...
}
m_fPlayerDead
, но здесь теперь мешает m_bObserverCrosshair
... Его, вроде бы, можно безболезненно подменить, отправив с drawn = 0
, но что произойдет в последствии я еще изучал. Известно только то, что после отправки он не проявляется.int CHudAmmo::MsgFunc_Crosshair(const char *pszName, int iSize, void *pbuf)
{
BEGIN_READ(pbuf, iSize);
static wrect_t nullrc;
bool drawn = READ_BYTE();
if (gEngfuncs.IsSpectateOnly())
return 1;
if (gEngfuncs.pfnGetCvarFloat("cl_observercrosshair") == 0)
return 1;
if (drawn)
{
SetCrosshair(m_hObserverCrosshair, m_rcObserverCrosshair, 255, 255, 255);
}
else
{
SetCrosshair(0, nullrc, 0, 0, 0);
}
m_bObserverCrosshair = true;
return 1;
}
message_begin(MSG_ONE, get_user_msgid("ScoreAttrib"), _, id)
write_byte(id)
write_byte(SCOREATTRIB_DEAD) // (1<<0)
message_end()
void CHudRadar::DrawRadar(float flTime)
{
...
if (g_PlayerExtraInfo[gHUD.m_iPlayerNum].dead == true)
return;
if (cl_radartype && cl_radartype->value != 0)
{
SPR_Set(m_hRadaropaque, 200, 200, 200);
SPR_DrawHoles(0, 0, 0, m_hradopaque);
}
else
{
SPR_Set(m_hRadar, 25, 75, 25);
SPR_DrawAdditive(0, 0, 0, m_hrad);
}
...
}
g_PlayerExtraInfo[gHUD.m_iPlayerNum].dead
и сразу рендеринг. Без шансов. Единственное что — еще можно обмануть, отправив DeathMsg самому себе по аналогии, но кто знает как отправить невидимый DeathMsg кому либо?Да, есть.Есть вообще какие-то замечания исходя из всего этого конкретно на том сервере, где было замечено скрытие радара?
Постоянно висит Dead на себе.Последствия в таблице счёта: только мы видим, что мы мертвы, но на самом деле нет.