Move global menu to new menu interface

This commit is contained in:
mittorn 2018-07-30 02:07:40 +07:00
parent 16c9ac26ed
commit 7eda9d88d0
6 changed files with 49 additions and 108 deletions

View File

@ -329,23 +329,6 @@ void UTIL_CoopApplyData( void )
int g_iMenu;
void UTIL_CoopLocalConfirmMenu(CBasePlayer *pPlayer)
{
const char *menu[] = {
"No",
"Cancel",
"Do not confirm",
"Don't confirm",
"Единая Россия"
};
menu[pPlayer->gravgunmod_data.m_iConfirmKey = RANDOM_LONG(2,4)] = "Confirm";
UTIL_CoopShowMenu(pPlayer, "Confirm changing map BACK (NOT RECOMMENDED)?", ARRAYSIZE(menu), menu);
pPlayer->gravgunmod_data.m_iMenuState = MENUSTATE_LOCAL_CONFIRM;
}
void GlobalMenu::Process( CBasePlayer *pPlayer, int imenu )
{
if( pPlayer->pev->flags & FL_SPECTATOR )
@ -386,37 +369,12 @@ void GlobalMenu::Process( CBasePlayer *pPlayer, int imenu )
UTIL_CoopKickPlayer( m_pPlayer );
}
break;
case 2: // vote by request
UTIL_CoopPrintMessage( "%s^7 selected ^3%s\n", UTIL_CoopPlayerName( pPlayer ), maps[imenu - 1] );
if( imenu < m_iConfirm )
{
votes[imenu-1]++;
m_iVoteCount++;
if( votes[1] >= 2 )
{
// two players vote for ban
UTIL_CoopKickPlayer( m_pPlayer );
}
if( m_iVoteCount >= m_iMaxCount )
{
for( int i = 0; i <= m_iConfirm; i++ )
if( votes[i] >= m_iMaxCount )
{
UTIL_CoopActivateChangeLevel( triggers[i] );
g_iMenu = 0;
}
}
}
}
}
void GlobalMenu::ShowGlobalMenu( const char *title, int count, const char **menu )
{
int count2 = 0;
for( int i = 1; i <= gpGlobals->maxClients; i++ )
{
CBaseEntity *plr = UTIL_PlayerByIndex( i );
@ -425,8 +383,14 @@ void GlobalMenu::ShowGlobalMenu( const char *title, int count, const char **menu
{
count2++;
CBasePlayer *player = (CBasePlayer *) plr;
UTIL_CoopShowMenu( player, title, count, menu, 30 );
player->gravgunmod_data.m_iMenuState = MENUSTATE_GLOBAL;
GGM_PlayerMenu &m = player->gravgunmod_data.menu.New( title );
for( int j = 0; j < count; j++ )
{
char cmd[32];
sprintf(cmd, "votemenu %d", i );
m.Add( menu[j], cmd );
}
m.Show();
}
}
@ -496,28 +460,7 @@ void UTIL_CoopNewCheckpoint( entvars_t *pevPlayer )
UTIL_CoopHudMessage( 1, 5, 0xFF0000FF, 0xFF0000FF, 0, 0.7, "New checkpoint by %s!\n", STRING( pevPlayer->netname ) );
}
void UTIL_CoopVoteMenu( CBasePlayer *pPlayer )
{
int count = 0;
for( int i = 1; i <= gpGlobals->maxClients; i++ )
{
CBaseEntity *plr = UTIL_PlayerByIndex( i );
if( plr && plr->IsPlayer() )
{
count++;
}
}
if( count < 4 )
{
UTIL_CoopPlayerMessage( pPlayer, 1, 5, 0xFFFFFFFF, 0xFFFFFFFF, 0, 0.7, "Need at least 4 players to vote changelevel!\n");
return;
}
g_GlobalMenu.VoteMenu(pPlayer);
}
/*
void UTIL_CoopMenu( CBasePlayer *pPlayer )
{
if( pPlayer->gravgunmod_data.m_state == STATE_SPAWNED )
@ -551,7 +494,7 @@ void UTIL_CoopMenu( CBasePlayer *pPlayer )
}
}
}
*/
bool UTIL_CoopPlayerDeath( CBasePlayer *pPlayer )
{
@ -567,7 +510,7 @@ bool UTIL_CoopPlayerDeath( CBasePlayer *pPlayer )
return false;
}
/*
void UTIL_CoopProcessMenu( CBasePlayer *pPlayer, int imenu )
{
switch( pPlayer->gravgunmod_data.m_iMenuState )
@ -649,6 +592,7 @@ void UTIL_CoopProcessMenu( CBasePlayer *pPlayer, int imenu )
}
//pPlayer->gravgunmod_data.m_iMenuState = MENUSTATE_NONE;
}
*/
bool UTIL_CoopRestorePlayerCoords(CBaseEntity *player, Vector *origin, Vector *angles )
{
@ -1020,6 +964,11 @@ bool COOP_ClientCommand( edict_t *pEntity )
else
return false;
}
else if( FStrEq( pcmd, "votemenu" ) )
{
int i = atoi( CMD_ARGV(1) );
g_GlobalMenu.Process(pPlayer, i);
}
return false;
}

View File

@ -92,10 +92,8 @@ public:
float m_flTime;
const char *maps[5];
int votes[5];
CBaseEntity *triggers[5];
EHANDLE m_pTrigger;
EHANDLE m_pPlayer;
void VoteMenu( CBasePlayer *pPlayer );
void ConfirmMenu( CBasePlayer *pPlayer, CBaseEntity *trigger, const char *mapname );
void ShowGlobalMenu( const char *title, int count, const char **menu );
void Process( CBasePlayer *pPlayer, int imenu );

View File

@ -483,11 +483,32 @@ void GGM_PlayerMenu::Show()
char buf[256];
#define MENU_STR(VAR) (#VAR)
sprintf( buf, MENU_STR(slot10\ntouch_hide _coops*\ntouch_show _coops\ntouch_addbutton "_coopst" "#%s" "" 0.16 0.11 0.41 0.3 0 255 0 255 78 1.5\n), m_sTitle);
CLIENT_COMMAND( pPlayer->edict(), buf);
if( pPlayer )
CLIENT_COMMAND( pPlayer->edict(), buf);
/*else
{
for( int i = 1; i <= gpGlobals->maxClients; i++ )
{
CBaseEntity *plr = UTIL_PlayerByIndex( i );
if( plr && plr->IsPlayer() )
CLIENT_COMMAND( plr->edict(), buf);
}
}*/
for( int i = 0; i < m_iCount; i++ )
{
sprintf( buf, MENU_STR(touch_settexture _coops%d "#%d. %s"\ntouch_show _coops%d\n), i+1, i+1, m_items[i].name, i + 1 );
CLIENT_COMMAND( pPlayer->edict(), buf);
if( pPlayer )
CLIENT_COMMAND( pPlayer->edict(), buf);
/*else
{
for( int i = 1; i <= gpGlobals->maxClients; i++ )
{
CBaseEntity *plr = UTIL_PlayerByIndex( i );
if( plr && plr->IsPlayer() )
CLIENT_COMMAND( plr->edict(), buf);
}
}*/
}
}
else
@ -500,7 +521,10 @@ void GGM_PlayerMenu::Show()
pbuf += sprintf( pbuf, "^3%d.^7 %s\n", i+1, m_items[i].name);
flags |= 1<<i;
}
MESSAGE_BEGIN(MSG_ONE, gmsgShowMenu, NULL, pPlayer->pev);
/*if( !pPlayer )
MESSAGE_BEGIN( MSG_ALL, gmsgShowMenu, NULL );
else*/
MESSAGE_BEGIN( MSG_ONE, gmsgShowMenu, NULL, pPlayer->pev );
WRITE_SHORT( flags ); // slots
WRITE_CHAR( 255 ); // show time
WRITE_BYTE( 0 ); // need more

View File

@ -61,8 +61,8 @@ class GGM_PlayerMenu
public:
CBasePlayer *pPlayer;
bool MenuSelect( int select );
GGM_PlayerMenu &SetTitle(const char *title);
GGM_PlayerMenu &New(const char *title);
GGM_PlayerMenu &SetTitle( const char *title );
GGM_PlayerMenu &New( const char *title );
GGM_PlayerMenu &Add( const char *name, const char *command );
GGM_PlayerMenu &Clear();
void Show();

View File

@ -132,8 +132,8 @@ BOOL CHalfLifeMultiplay::ClientCommand( CBasePlayer *pPlayer, const char *pcmd )
{
int imenu = atoi( CMD_ARGV( 1 ) );
if( mp_coop.value )
UTIL_CoopProcessMenu( pPlayer, imenu );
// if( mp_coop.value )
// UTIL_CoopProcessMenu( pPlayer, imenu );
return pPlayer->gravgunmod_data.menu.MenuSelect(imenu);
}

View File

@ -1502,36 +1502,6 @@ void UTIL_CoopActivateChangeLevel( CBaseEntity *pTrigger )
trigger->ChangeLevelNow( NULL );
}
void GlobalMenu::VoteMenu( CBasePlayer *pPlayer )
{
if( g_iMenu && gpGlobals->time - m_flTime < 30 )
return; // wait 30s befor new confirm vote
CBaseEntity *pTrigger = NULL;
int i = 0;
g_iMenu = 2;
m_flTime = gpGlobals->time;
maps[i++] = "Keep this map";
maps[i++] = "BAN";
while( (pTrigger = UTIL_FindEntityByClassname( pTrigger, "trigger_changelevel" )) && (i < 5) )
{
CChangeLevel *ent = (CChangeLevel *)pTrigger;
votes[i] = 0;
triggers[i] = ent;
maps[i++] = ent->m_szMapName;
}
votes[i] = 0;
triggers[i] = NULL;
m_iConfirm = i;
m_iVoteCount = 0;
m_pPlayer = pPlayer;
UTIL_CoopPrintMessage( "%s^7 opened vote menu\n", UTIL_CoopPlayerName( pPlayer ) );
ShowGlobalMenu(UTIL_VarArgs("%s requested to force change map", UTIL_CoopPlayerName( pPlayer ) ), i, maps);
}
void UTIL_CoopValidateOffset( void )
{
if( !g_SavedCoords.validoffset)