Coop text interfaces

This commit is contained in:
mittorn 2017-02-01 19:45:29 +00:00
parent 11d17bd7fb
commit 5dabd5f751
3 changed files with 113 additions and 34 deletions

View File

@ -10,6 +10,96 @@ GlobalMenu g_GlobalMenu;
struct SavedCoords g_SavedCoords, s_SavedCoords;
static float msglimittime1, msglimittime2;
void UTIL_CoopPlayerMessage( CBaseEntity *pPlayer, int channel, float time, unsigned int color1, unsigned int color2, float x, float y, const char *format, ... )
{
if( !pPlayer )
return;
hudtextparms_t params;
params.x = x, params.y = y;
params.fadeinTime = params.fadeoutTime = .5f;
params.holdTime = time;
params.r1 = (color1 >> 24) & 0xFF, params.g1 = (color1 >> 16) & 0xFF, params.b1 = (color1 >> 8) & 0xFF, params.a1 = color1 & 0xFF;
params.r2 = (color2 >> 24) & 0xFF, params.g2 = (color2 >> 16) & 0xFF, params.b2 = (color2 >> 8) & 0xFF, params.a2 = color2 & 0xFF;
params.channel = channel;
va_list argptr;
char string[256];
va_start( argptr, format );
int len = vsnprintf( string, 256, format, argptr );
va_end( argptr );
string[len] = 0;
char *pstr = string;
// set line breaks
for( int i = 0; *pstr; pstr++,i++ )
{
if( *pstr == '\n' )
i = 0;
if( i >= 79 )
*pstr = '\n', i = 0;
}
UTIL_HudMessage( pPlayer, params, string );
}
void UTIL_CoopHudMessage( int channel, float time, unsigned int color1, unsigned int color2, float x, float y, const char *format, ... )
{
if( gpGlobals->time < msglimittime1 )
return;
msglimittime1 = gpGlobals->time + 0.4;
hudtextparms_t params;
params.x = x, params.y = y;
params.fadeinTime = params.fadeoutTime = .5f;
params.holdTime = time;
params.r1 = (color1 >> 24) & 0xFF, params.g1 = (color1 >> 16) & 0xFF, params.b1 = (color1 >> 8) & 0xFF, params.a1 = color1 & 0xFF;
params.r2 = (color2 >> 24) & 0xFF, params.g2 = (color2 >> 16) & 0xFF, params.b2 = (color2 >> 8) & 0xFF, params.a2 = color2 & 0xFF;
params.channel = channel;
va_list argptr;
char string[256];
va_start( argptr, format );
int len = vsnprintf( string, 256, format, argptr );
va_end( argptr );
string[len] = 0;
char *pstr = string;
// set line breaks
for( int i = 0; *pstr; pstr++,i++ )
{
if( *pstr == '\n' )
i = 0;
if( i >= 79 )
*pstr = '\n', i = 0;
}
UTIL_HudMessageAll( params, string );
}
void UTIL_CoopPrintMessage( const char *format, ... )
{
if( gpGlobals->time < msglimittime2 )
return;
msglimittime2 = gpGlobals->time + 0.4;
va_list argptr;
char string[256];
va_start( argptr, format );
int len = vsnprintf( string, 256, format, argptr );
va_end( argptr );
string[len] = 0;
MESSAGE_BEGIN( MSG_ALL, 8, NULL ); // svc_print
WRITE_BYTE( 3 ); // PRINT_CHAT
WRITE_STRING( string );
MESSAGE_END();
}
void UTIL_CleanSpawnPoint( Vector origin, float dist )
{
@ -196,6 +286,7 @@ void UTIL_CoopClearData( void )
SavedCoords l_SavedCoords = {0};
g_SavedCoords = l_SavedCoords;
memset( &g_checkpoints, 0, sizeof( g_checkpoints ) );
msglimittime1 = msglimittime2 = 0;
}
bool g_fPause;
@ -257,10 +348,7 @@ void GlobalMenu::Process( CBasePlayer *pPlayer, int imenu )
return;
}
m_iConfirm++;
MESSAGE_BEGIN( MSG_ALL, 8, NULL ); // svc_print
WRITE_BYTE( 3 ); // PRINT_CHAT
WRITE_STRING( UTIL_VarArgs( "%s^7 confirmed map change\n", ( pPlayer->pev->netname && STRING( pPlayer->pev->netname )[0] != 0 ) ? STRING( pPlayer->pev->netname ) : "unconnected"));
MESSAGE_END();
UTIL_CoopPrintMessage( "%s^7 confirmed map change\n", UTIL_CoopPlayerName( pPlayer ));
}
if( imenu == 2 ) // cancel
@ -277,10 +365,7 @@ void GlobalMenu::Process( CBasePlayer *pPlayer, int imenu )
}
break;
case 2: // vote by request
MESSAGE_BEGIN( MSG_ALL, 8, NULL ); // svc_print
WRITE_BYTE( 3 ); // PRINT_CHAT
WRITE_STRING( UTIL_VarArgs( "%s^7 selected ^3%s\n", ( pPlayer->pev->netname && STRING( pPlayer->pev->netname )[0] != 0 ) ? STRING( pPlayer->pev->netname ) : "unconnected", maps[imenu - 1] ));
MESSAGE_END();
UTIL_CoopPrintMessage( "%s^7 selected ^3%s\n", UTIL_CoopPlayerName( pPlayer ), maps[imenu - 1] );
if( imenu < m_iConfirm )
{
@ -347,10 +432,8 @@ void GlobalMenu::ConfirmMenu( CBasePlayer *pPlayer, CBaseEntity *trigger, const
"Cancel",
"BAN"
};
MESSAGE_BEGIN( MSG_ALL, 8, NULL ); // svc_print
WRITE_BYTE( 3 ); // PRINT_CHAT
WRITE_STRING( UTIL_VarArgs( "%s^7 wants to change map ^1BACKWARDS\n", ( pPlayer->pev->netname && STRING( pPlayer->pev->netname )[0] != 0 ) ? STRING( pPlayer->pev->netname ) : "unconnected"));
MESSAGE_END();
UTIL_CoopPrintMessage( "%s^7 wants to change map ^1BACK to %s\n", UTIL_CoopPlayerName( pPlayer ), mapname );
ShowGlobalMenu(UTIL_VarArgs("Confirm changing map BACK TO %s?", mapname), ARRAYSIZE(menu), menu);
}
@ -381,15 +464,14 @@ void UTIL_CoopCheckpointMenu( CBasePlayer *pPlayer )
void UTIL_CoopNewCheckpoint( entvars_t *pevPlayer )
{
if( !pevPlayer->netname )
return;
memmove( &g_checkpoints[1], &g_checkpoints[0], sizeof ( g_checkpoints[0] ) * 3 );
g_checkpoints[0].time = gpGlobals->time;
snprintf( g_checkpoints[0].str, 31, "%5s %d", STRING( pevPlayer->netname ), (int)( gpGlobals->time / 60 ) );
g_checkpoints[0].origin = pevPlayer->origin;
g_checkpoints[0].angles = pevPlayer->angles;
MESSAGE_BEGIN( MSG_ALL, 8, NULL ); // svc_print
WRITE_BYTE( 3 ); // PRINT_CHAT
WRITE_STRING( "New checkpoint availiable\n" );
MESSAGE_END();
UTIL_CoopPrintMessage( "New checkpoint by %s!\n", STRING( pevPlayer->netname ) );
}
@ -408,7 +490,7 @@ void UTIL_CoopVoteMenu( CBasePlayer *pPlayer )
}
if( count < 4 )
{
ClientPrint( pPlayer->pev, HUD_PRINTCENTER, "Need at least 4 players to vote changelevel!\n" );
UTIL_CoopPlayerMessage( pPlayer, 0, 5, 0xFFFFFFFF, 0xFFFFFFFF, -1, -1, "Need at least 4 players to vote changelevel!\n");
return;
}
g_GlobalMenu.VoteMenu(pPlayer);

View File

@ -71,6 +71,11 @@ Vector UTIL_FixupSpawnPoint(Vector spawn);
void UTIL_CoopActivateChangeLevel( CBaseEntity *pTrigger );
void UTIL_CoopClearData( void );
void UTIL_CoopApplyData( void );
void UTIL_CoopPrintMessage( const char *format, ... );
void UTIL_CoopHudMessage( int channel, float time, unsigned int color1, unsigned int color2, float x, float y, const char *format, ... );
void UTIL_CoopPlayerMessage( CBaseEntity *pPlayer, int channel, float time, unsigned int color1, unsigned int color2, float x, float y, const char *format, ... );
#ifdef PLAYER_H
void UTIL_CoopKickPlayer(CBaseEntity *pPlayer);
bool UTIL_CoopIsBadPlayer( CBaseEntity *plr );

View File

@ -1526,10 +1526,7 @@ void GlobalMenu::VoteMenu( CBasePlayer *pPlayer )
m_iConfirm = i;
m_iVoteCount = 0;
m_pPlayer = pPlayer;
MESSAGE_BEGIN( MSG_ALL, 8, NULL ); // svc_print
WRITE_BYTE( 3 ); // PRINT_CHAT
WRITE_STRING( UTIL_VarArgs( "%s^7 opened vote menu\n", ( pPlayer->pev->netname && STRING( pPlayer->pev->netname )[0] != 0 ) ? STRING( pPlayer->pev->netname ) : "unconnected"));
MESSAGE_END();
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);
}
@ -1616,7 +1613,7 @@ void CChangeLevel::ChangeLevelNow( CBaseEntity *pActivator )
if( !strcmp( m_szMapName, mp_coop_disabledmap.string ) )
{
UTIL_HudMessageAll( params, UTIL_VarArgs( "MAP %S IS DISABLED", m_szMapName ) );
UTIL_CoopPlayerMessage( pActivator, 0, 5, 0xFF000FF, 0xFFFF00FF, -1, -1, "MAP %S IS DISABLED", m_szMapName );
return;
}
// forget touch by some fool
@ -1687,16 +1684,13 @@ void CChangeLevel::ChangeLevelNow( CBaseEntity *pActivator )
if( pActivator && pActivator->IsPlayer() && m_flRepeatTimer - gpGlobals->time < -1 )
{
CBasePlayer *pPlayer = (CBasePlayer*)pActivator;
MESSAGE_BEGIN( MSG_ALL, 8, NULL ); // svc_print
WRITE_BYTE( 3 ); // PRINT_CHAT
WRITE_STRING( UTIL_VarArgs( "%s^7 trying activate changelevel too soon\n", ( pPlayer->pev->netname && STRING( pPlayer->pev->netname )[0] != 0 ) ? STRING( pPlayer->pev->netname ) : "unconnected"));
MESSAGE_END();
UTIL_CoopPrintMessage("%s^7 trying activate changelevel too soon\n", UTIL_CoopPlayerName( pPlayer ));
UTIL_CleanSpawnPoint( pPlayer->pev->origin, 50 );
m_flRepeatTimer = gpGlobals->time;
pPlayer->m_iLocalConfirm = -2;
}
UTIL_HudMessageAll( params, "Cannot change level: Not enough players!\nWait 30 sec before you may changelevel!" );
UTIL_CoopHudMessage( 1, 5, 0xFF0000FF, 0xFF0000FF, 0, 0.7, "Cannot change level: Not enough players!\nWait 30 sec before you may changelevel!" );
return;
}
@ -1706,9 +1700,10 @@ void CChangeLevel::ChangeLevelNow( CBaseEntity *pActivator )
i = 1;
if( i )
UTIL_HudMessageAll( params, UTIL_VarArgs( "%s touched end of map\nnext is %s %s, %d to go\n",
( pActivator->pev->netname && STRING( pActivator->pev->netname )[0] != 0 ) ? STRING( pActivator->pev->netname ) : "unconnected",
st_szNextMap, st_szNextSpot, i ) );
UTIL_CoopHudMessage( 1, 7, 0x00FFFFFF, 0xFF00FFFF, 0, 0,
"%s touched end of map\nnext is %s %s, %d to go\n",
UTIL_CoopPlayerName( pActivator ),
st_szNextMap, st_szNextSpot, i );
if( count2 )
{
pev->rendercolor.x = count1 * 255 / count2;
@ -1807,10 +1802,7 @@ void CChangeLevel::ChangeLevelNow( CBaseEntity *pActivator )
}
else ALERT( at_console, "Player is in the transition volume %s, changing level now\n", m_szLandmarkName );
MESSAGE_BEGIN( MSG_ALL, 8, NULL ); // svc_print
WRITE_BYTE( 3 ); // PRINT_CHAT
WRITE_STRING( UTIL_VarArgs( "%s^7 activated changelevel, spawncheck is %d\n", UTIL_CoopPlayerName( pPlayer ), (int)!m_fSkipSpawnCheck ) );
MESSAGE_END();
UTIL_CoopPrintMessage( "%s^7 activated changelevel, spawncheck is %d\n", UTIL_CoopPlayerName( pPlayer ), (int)!m_fSkipSpawnCheck );
// This object will get removed in the call to CHANGE_LEVEL, copy the params into "safe" memory
strcpy( st_szNextMap, m_szMapName );