oleg_nelasy
Участник
- Сообщения
- 664
- Реакции
- 46
На сервере использую мод prophunt. Проблема следующая игроку за кт на время отведённое для того чтобы спрятались т выключаю экран, при этом у игрока на это время также закрывается hud которым я вывожу для игрока при нажатии на таб сколько времени осталось до смены карты. Можно каким-нибудь образом отрисовывать худ поверх закрашенного экрана?
Плагин с помощью которого вывожу время до конца карты при нажатии на таб.
Таким образом выключаю игроку экран
Плагин с помощью которого вывожу время до конца карты при нажатии на таб.
C-подобный:
#pragma semicolon 1
#pragma newdecls required
#include sdktools
#undef REQUIRE_PLUGIN
#include mapchooser
#define REQUIRE_PLUGIN
#define channel 5
bool g_bMapChooser;
public void OnPluginStart()
{
g_bMapChooser = LibraryExists("mapchooser");
LoadTranslations("plugin.PanoramaTimeLeft");
}
stock void ShowGameText(int iClient, int iChannel, int color[4], float x, float y, float time, char[] sText)
{
SetHudTextParamsEx(x, y, time, color, _, 0, 0.0, 0.0, 0.0);
ShowHudText(iClient,iChannel, sText);
}
public void OnLibraryRemoved(const char[] sName)
{
if (strcmp(sName, "mapchooser") == 0)
{
g_bMapChooser = false;
}
}
public void OnLibraryAdded(const char[] sName)
{
if (strcmp(sName, "mapchooser") == 0)
{
g_bMapChooser = true;
}
}
public void OnPlayerRunCmdPost(int iClient, int buttons, int impulse, const float vel[3], const float angles[3], int weapon, int subtype, int cmdnum, int tickcount, int seed, const int mouse[2])
{
static int _buttons[MAXPLAYERS+1];
static int _iTime[MAXPLAYERS+1];
if(buttons & IN_SCORE)
{
int iTime = GetTime();
if(_buttons[iClient] & IN_SCORE)
{
if(_iTime[iClient] < iTime)
{
ShowInfo(iClient); //Обновляем инфу
}
}
else ShowInfo(iClient); //Отображаем сразу после нажатия
_iTime[iClient] = iTime;
}
else
{
if(_buttons[iClient] & IN_SCORE)
{
ShowGameText(iClient, channel, { 0, 0, 0, 0 }, 0.0, 0.0, 0.0, "");
}
}
_buttons[iClient] = buttons;
}
void ShowInfo(int iClient)
{
int timeleft;
char sBuf[256];
GetMapTimeLeft(timeleft);
SetGlobalTransTarget(iClient);
if(timeleft > 0) FormatEx(sBuf, sizeof sBuf, "%t", "Until the end of the map", timeleft / 60, timeleft % 60);
else FormatEx(sBuf, sizeof sBuf, "%t", "Last round");
if(g_bMapChooser && !(EndOfMapVoteEnabled() && !HasEndOfMapVoteFinished()))
{
char sMap[PLATFORM_MAX_PATH];
GetNextMap(sMap, sizeof sMap);
GetMapDisplayName(sMap, sMap, sizeof sMap);
Format(sBuf, sizeof sBuf, "%t", "The next map", sBuf, sMap);
}
ShowGameText(iClient, channel, { 232, 232, 232, 255 }, 0.01, 0.45, 1.1, sBuf);
}
Таким образом выключаю игроку экран
C-подобный:
stock void Client_Blind(int iClient, bool blind = false)
{
Handle hFadeClient = StartMessageOne("Fade", iClient);
PbSetInt(hFadeClient, "duration", 1);
PbSetInt(hFadeClient, "hold_time", 3);
if (blind)
PbSetInt(hFadeClient, "flags", FFADE_STAYOUT);
else PbSetInt(hFadeClient, "flags", FFADE_PURGE);
int color[] = {0, 0, 0, 255}; //TODO change color based on countdown
PbSetColor(hFadeClient, "clr", color);
EndMessage();
}