Penguin Enthusiast
Join Date: Jun 2016
Location: Macedonia
|
05-12-2019
, 13:11
Re: Colorchat ^3 showing wrong team color
|
#5
|
Quote:
Originally Posted by OciXCrom
The team is checked when printing the message, so there's nothing obvious about it.
One of the reasons I decided to create CromChat is exactly this bug that ColorChat has. I personally haven't noticed it happening with CromChat, yet.
|
Randomly, sometimes I start the round as a zombie and get a blue chat color, sometimes in the middle of the round my color changes.
Here's the part that is responsible for printing:
PHP Code:
public OnHookSay( id )
{
new g_iItems[ PlayerData ];
new szName[ 32 ], szAuthID[ 32 ], szPassword[ 22 ], szArgs[ 192 ];
read_args( szArgs, charsmax( szArgs ) );
remove_quotes( szArgs );
get_user_name( id, szName, charsmax( szName ) );
get_user_authid( id, szAuthID, charsmax( szAuthID ) );
get_user_info( id, "_pw", szPassword, charsmax( szPassword ) );
for( new iIndex; iIndex < ArraySize( g_aDatabase ); iIndex++ )
{
ArrayGetArray( g_aDatabase, iIndex, g_iItems );
trim( szName );
trim( szPassword );
if( equal( g_iItems[ Player_Name ], szName ) || equal( g_iItems[ Player_Name ], szAuthID ) )
{
if( equal( g_iItems[ Player_Password ], szPassword ) || g_iItems[ Player_Password ][ 0 ] == EOS )
{
if( g_iItems[ Player_Suspended ] || g_iItems[ Player_Prefix ][ 0 ] == EOS )
{
return PLUGIN_CONTINUE;
}
if( ! szArgs[ 0 ] )
{
return PLUGIN_HANDLED;
}
else
{
if( is_user_alive( id ) )
{
switch( get_user_team( id ) )
{
case 1, 2:
{
CC_SendMessage( 0, "&x04%s &x03%s&x01: &x04%s", g_iItems[ Player_Prefix ], szName, szArgs );
return PLUGIN_HANDLED_MAIN;
}
case 3:
{
CC_SendMessage( 0, "&x03%s &x04%s &x03%s&x01: &x04%s", g_iConfig[ SPECTATOR_PREFIX ], g_iItems[ Player_Prefix ], szName, szArgs );
return PLUGIN_HANDLED_MAIN;
}
}
}
else
{
CC_SendMessage( 0, "&x03%s &x04%s &x03%s&x01: &x04%s", g_iConfig[ DEAD_PREFIX ], g_iItems[ Player_Prefix ], szName, szArgs );
return PLUGIN_HANDLED_MAIN;
}
}
}
}
}
return PLUGIN_CONTINUE;
}
Here's full code:
PHP Code:
#include < amxmodx >
#include < amxmisc >
#include < hamsandwich >
#include < fakemeta >
#include < cromchat >
#define PLUGIN_AUTHOR "DoNii"
#define PLUGIN_VERSION "3.2"
#define PLUGIN_NAME "Elite Admin System"
#define SERVER_ID 0
enum _:PlayerData
{
Player_Name[ 32 ],
Player_Password[ 32 ],
Player_AccessFlags[ 32 ],
Player_Prefix[ 32 ],
Player_Model_T[ 32 ],
Player_Model_CT[ 32 ],
Player_Expire_Date[ 32 ],
Player_Immunity[ 10 ],
bool:Player_Suspended
}
enum _:eConfig
{
DEAD_PREFIX[ 32 ],
SPECTATOR_PREFIX[ 32 ],
COMMAND_ADDADMIN[ 32 ],
USERS_FILE[ 32 ],
BANS_FILE[ 32 ],
LOGS_FILE[ 32 ],
SYSTEM_PREFIX[ 32 ],
NO_ACCESS_COMMAND[ 32 ],
ADMIN_ADD_FLAG,
Float:TIME_CHECK_ADMINS
}
enum _:Commands
{
Cmd_Name[ 32 ],
Cmd_Callback[ 32 ],
Cmd_Flags,
Cmd_Plugin,
Cmd_FuncId
}
// Configuration file
new const g_szConfigFile[ ] = "EliteAdminSystem_Config.ini";
new Array:g_aDatabase;
new Array:g_aCommands;
new g_iFwAdminAdded;
new g_iDummyResult;
new bool:g_bHasModel[ 33 ];
new g_iConfig[ eConfig ];
new g_szConfigs[ 64 ];
public plugin_precache( )
{
get_configsdir( g_szConfigs, charsmax( g_szConfigs ) );
g_aDatabase = ArrayCreate( PlayerData );
g_aCommands = ArrayCreate( Commands );
CheckDirectory( );
ReadIni( );
ReloadFile( );
new eData[ PlayerData ], szModel[ 128 ];
for( new i; i < ArraySize( g_aDatabase ); i++ )
{
ArrayGetArray( g_aDatabase, i, eData );
if( eData[ Player_Model_T ][ 0 ] )
{
formatex( szModel, charsmax( szModel ), "models/player/%s/%s.mdl", eData[ Player_Model_T ], eData[ Player_Model_T ] );
precache_model( szModel );
}
if( eData[ Player_Model_CT ][ 0 ] )
{
formatex( szModel, charsmax( szModel ), "models/player/%s/%s.mdl", eData[ Player_Model_CT ], eData[ Player_Model_CT ] );
precache_model( szModel );
}
}
}
public plugin_init( )
{
register_plugin( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );
remove_user_flags( SERVER_ID, read_flags( "z" ) );
register_concmd( g_iConfig[ COMMAND_ADDADMIN ], "OnAddNewAdmin" );
register_clcmd( "say", "OnHookSay" );
register_clcmd( "say_team", "OnHookSay" );
set_task( g_iConfig[ TIME_CHECK_ADMINS ], "OnTaskResetAdmins", _, _, _, "b" );
server_cmd( "exec %s/amxx.cfg", g_szConfigs );
server_cmd( "exec %s/sql.cfg", g_szConfigs );
g_iFwAdminAdded = CreateMultiForward( "AdminAdded", ET_IGNORE, FP_STRING, FP_STRING, FP_STRING, FP_STRING, FP_STRING, FP_STRING, FP_STRING );
RegisterHam( Ham_Spawn, "player", "Ham_Spawn_Pre", 0 );
RegisterHam( Ham_Spawn, "player", "Ham_Spawn_Post", 1 );
register_forward( FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged" );
register_forward( FM_SetClientKeyValue, "fw_SetClientKeyValue" );
}
public plugin_natives( )
{
register_library( "elite_admin_system" );
register_native( "RegisterCommand", "OnNativeRegisterCommand", 0 );
}
public OnNativeRegisterCommand( iPlugin, iParams )
{
new eData[ Commands ], szHandler[ 32 ];
get_string( 1, eData[ Cmd_Name ], charsmax( eData[ Cmd_Name ] ) );
get_string( 2, szHandler, charsmax( szHandler ) );
eData[ Cmd_Flags ] = get_param( 3 );
eData[ Cmd_Plugin ] = iPlugin;
eData[ Cmd_FuncId ] = get_func_id( szHandler, iPlugin );
ArrayPushArray( g_aCommands, eData );
}
public client_connect( id )
{
g_bHasModel[ id ] = false;
remove_user_flags( id );
set_user_flags( id, ADMIN_USER );
}
public client_disconnect( id )
{
g_bHasModel[ id ] = false;
remove_user_flags( id );
set_user_flags( id, ADMIN_USER );
}
public Ham_Spawn_Pre( id )
{
g_bHasModel[ id ] = false;
}
public Ham_Spawn_Post( id )
{
if( ! is_user_alive( id ) )
{
return HAM_IGNORED;
}
new szName[ 32 ], szSteamId[ 32 ], eData[ PlayerData ];
get_user_name( id, szName, charsmax( szName ) );
get_user_authid( id, szSteamId, charsmax( szSteamId ) );
for( new i; i < ArraySize( g_aDatabase ); i++ )
{
ArrayGetArray( g_aDatabase, i, eData );
if( equal( eData[ Player_Name ], szName ) || equal( eData[ Player_Name ], szSteamId ) )
{
switch( get_user_team( id ) )
{
case 1:
{
if( eData[ Player_Model_T ][ 0 ] )
{
set_user_info( id, "model", eData[ Player_Model_T ] );
g_bHasModel[ id ] = true;
}
}
case 2:
{
if( eData[ Player_Model_CT ][ 0 ] )
{
set_user_info( id, "model", eData[ Player_Model_CT ] );
g_bHasModel[ id ] = true;
}
}
}
}
}
return HAM_IGNORED;
}
public fw_SetClientKeyValue( id, const szBuffer[ ], const szKey[ ] )
{
if( ! g_bHasModel[ id ] )
{
return FMRES_IGNORED;
}
if( equal( szKey, "model" ) )
{
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}
public fw_ClientUserInfoChanged( id )
{
if( g_bHasModel[ id ] )
{
return FMRES_IGNORED;
}
static szCurrentModel[ 32 ];
get_user_info( id, "model", szCurrentModel, charsmax( szCurrentModel ) );
new eData[ PlayerData ], szName[ 32 ], szSteamId[ 32 ];
get_user_name( id, szName, charsmax( szName ) );
get_user_authid( id, szSteamId, charsmax( szSteamId ) );
for( new i; i < ArraySize( g_aDatabase ); i++ )
{
ArrayGetArray( g_aDatabase, i, eData );
if( equal( eData[ Player_Name ], szName ) || equal( eData[ Player_Name ], szSteamId ) )
{
switch( get_user_team( id ) )
{
case 1:
{
if( eData[ Player_Model_T ][ 0 ] )
{
set_user_info( id, "model", eData[ Player_Model_T ] );
}
}
case 2:
{
if( eData[ Player_Model_CT ][ 0 ] )
{
set_user_info( id, "model", eData[ Player_Model_CT ] );
}
}
}
}
}
return FMRES_IGNORED;
}
public client_command( id )
{
new szCommand[ 32 ];
read_argv( 0, szCommand, charsmax( szCommand ) );
new eData[ Commands ];
for( new i; i < ArraySize( g_aCommands ); i++ )
{
ArrayGetArray( g_aCommands, i, eData );
if( equal( szCommand, eData[ Cmd_Name ] ) )
{
if( ~ get_user_flags( id ) & eData[ Cmd_Flags ] )
{
client_print( id, print_console, "%s %s", g_iConfig[ SYSTEM_PREFIX ], g_iConfig[ NO_ACCESS_COMMAND ] );
return PLUGIN_HANDLED;
}
callfunc_begin_i( eData[ Cmd_FuncId ], eData[ Cmd_Plugin ] );
callfunc_push_int( id );
callfunc_end( );
return PLUGIN_HANDLED;
}
}
return PLUGIN_CONTINUE;
}
public OnAddNewAdmin( id )
{
if( ~ get_user_flags( id ) & g_iConfig[ ADMIN_ADD_FLAG ] )
{
client_print( id, print_console, "%s %s", g_iConfig[ SYSTEM_PREFIX ], g_iConfig[ NO_ACCESS_COMMAND ] );
return PLUGIN_HANDLED;
}
if( read_argc( ) != 9 )
{
client_print( id, print_console, "Usage is : %s <Nick|SteamID> <Password> <Flags> <Prefix> <T_Model> <CT_Model> <Immunity> <Expire_Date>", g_iConfig[ COMMAND_ADDADMIN ] );
return PLUGIN_HANDLED;
}
new szAdminName[ 32 ], szAdminPassword[ 18 ], szAdminFlags[ 32 ], szAdminPrefix[ 18 ], szModelT[ 32 ], szModelCT[ 32 ], szImmunity[ 32 ], szExpireDate[ 32 ];
new szAdminName2[ 32 ];
get_user_name( id, szAdminName2, charsmax( szAdminName2 ) );
read_argv( 1, szAdminName, charsmax( szAdminName ) );
read_argv( 2, szAdminPassword, charsmax( szAdminPassword ) );
read_argv( 3, szAdminFlags, charsmax( szAdminFlags ) );
read_argv( 4, szAdminPrefix, charsmax( szAdminPrefix ) );
read_argv( 5, szModelT, charsmax( szModelT ) );
read_argv( 6, szModelCT, charsmax( szModelCT ) );
read_argv( 7, szImmunity, charsmax( szImmunity ) );
read_argv( 8, szExpireDate, charsmax( szExpireDate ) );
if( ( strlen( szAdminName ) < 3 ) || ( strlen( szAdminFlags ) < 1 ) )
{
client_print( id, print_console, "%s Incorrect format", g_iConfig[ SYSTEM_PREFIX ] );
return PLUGIN_HANDLED;
}
new szFormat[ 128 ];
formatex( szFormat, charsmax( szFormat ), "%s/%s", g_szConfigs, g_iConfig[ USERS_FILE ] );
new iFile = fopen( szFormat, "r+" );
new szByteVal[ 1 ], szNewLine[ 128 ];
fseek( iFile , -1 , SEEK_END );
fread_raw( iFile , szByteVal , sizeof( szByteVal ) , BLOCK_BYTE );
fseek( iFile , 0 , SEEK_END );
formatex( szNewLine , charsmax( szNewLine ) , "%s^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^"" , ( szByteVal[ 0 ] == 10 ) ? "" : "^n", szAdminName, szAdminPassword, szAdminFlags, szAdminPrefix, szModelT, szModelCT, szImmunity, szExpireDate );
fprintf( iFile, szNewLine );
fclose( iFile );
client_print( id, print_console, "%s Successfully Added New Admin: Name: %s | Password: %s | Flags: %s | Prefix: %s | Model_T: %s | Model_CT: %s | Immunity: %s | Expire Date: %s |", g_iConfig[ SYSTEM_PREFIX ], szAdminName, szAdminPassword, szAdminFlags, szAdminPrefix, szModelT, szModelCT, szImmunity, szExpireDate );
CC_SendMessage( 0, "&x04%s &x03ADMIN &x04%s ^1successfully added a new admin &x03[^1Name: &x04%s &x03| &x01Flags: &x04%s &x03| &x01Prefix: &x04%s&x03]", g_iConfig[ SYSTEM_PREFIX ], szAdminName2, szAdminName, szAdminFlags, szAdminPrefix );
new szDate[ 32 ];
get_time( "%m/%d/%Y - %H:%M:%S", szDate, charsmax( szDate ) );
log_to_file( g_iConfig[ LOGS_FILE ], "(%s) ADMIN %s added a new admin: Name: %s | Password: %s | Flags: %s | Prefix: %s | Model_T: %s | Model_CT: %s | Immunity: %s | Expire Date: %s |", szDate, szAdminName2, szAdminName, szAdminPassword, szAdminFlags, szAdminPrefix, szModelT, szModelCT, szImmunity, szExpireDate );
ExecuteForward( g_iFwAdminAdded, g_iDummyResult, szAdminName, szAdminPassword, szAdminFlags, szAdminPrefix, szModelT, szModelCT, szExpireDate );
return PLUGIN_CONTINUE;
}
public client_authorized( id )
{
CheckPlayerAdmin( id );
}
public OnTaskResetAdmins( )
{
ReloadFile( );
new szPlayers[ 32 ], iNum;
get_players( szPlayers, iNum, "ch" );
static iTempID;
for( new i; i < iNum; i++ )
{
iTempID = szPlayers[ i ];
CheckPlayerAdmin( iTempID );
}
}
public OnHookSay( id )
{
new g_iItems[ PlayerData ];
new szName[ 32 ], szAuthID[ 32 ], szPassword[ 22 ], szArgs[ 192 ];
read_args( szArgs, charsmax( szArgs ) );
remove_quotes( szArgs );
get_user_name( id, szName, charsmax( szName ) );
get_user_authid( id, szAuthID, charsmax( szAuthID ) );
get_user_info( id, "_pw", szPassword, charsmax( szPassword ) );
for( new iIndex; iIndex < ArraySize( g_aDatabase ); iIndex++ )
{
ArrayGetArray( g_aDatabase, iIndex, g_iItems );
trim( szName );
trim( szPassword );
if( equal( g_iItems[ Player_Name ], szName ) || equal( g_iItems[ Player_Name ], szAuthID ) )
{
if( equal( g_iItems[ Player_Password ], szPassword ) || g_iItems[ Player_Password ][ 0 ] == EOS )
{
if( g_iItems[ Player_Suspended ] || g_iItems[ Player_Prefix ][ 0 ] == EOS )
{
return PLUGIN_CONTINUE;
}
if( ! szArgs[ 0 ] )
{
return PLUGIN_HANDLED;
}
else
{
if( is_user_alive( id ) )
{
switch( get_user_team( id ) )
{
case 1, 2:
{
CC_SendMessage( 0, "&x04%s &x03%s&x01: &x04%s", g_iItems[ Player_Prefix ], szName, szArgs );
return PLUGIN_HANDLED_MAIN;
}
case 3:
{
CC_SendMessage( 0, "&x03%s &x04%s &x03%s&x01: &x04%s", g_iConfig[ SPECTATOR_PREFIX ], g_iItems[ Player_Prefix ], szName, szArgs );
return PLUGIN_HANDLED_MAIN;
}
}
}
else
{
CC_SendMessage( 0, "&x03%s &x04%s &x03%s&x01: &x04%s", g_iConfig[ DEAD_PREFIX ], g_iItems[ Player_Prefix ], szName, szArgs );
return PLUGIN_HANDLED_MAIN;
}
}
}
}
}
return PLUGIN_CONTINUE;
}
CheckPlayerAdmin( const id )
{
new g_iItems[ PlayerData ];
new szName[ 32 ], szAuthID[ 32 ], szPassword[ 22 ];
get_user_name( id, szName, charsmax( szName ) );
get_user_authid( id, szAuthID, charsmax( szAuthID ) );
get_user_info( id, "_pw", szPassword, charsmax( szPassword ) );
for( new iIndex; iIndex < ArraySize( g_aDatabase ); iIndex++ )
{
ArrayGetArray( g_aDatabase, iIndex, g_iItems );
if( equal( g_iItems[ Player_Name ], szName ) || equal( g_iItems[ Player_Name ], szAuthID ) )
{
if( equal( g_iItems[ Player_Password ], szPassword ) || g_iItems[ Player_Password ][ 0 ] == EOS )
{
if( g_iItems[ Player_Suspended ] )
{
remove_user_flags( id );
set_user_flags( id, ADMIN_USER );
}
else
{
remove_user_flags( id );
set_user_flags( id, read_flags( g_iItems[ Player_AccessFlags ] ) );
}
}
else if( ! equal( g_iItems[ Player_Password ], szPassword ) )
{
server_cmd( "kick #%d ^"Incorrect Password^"", get_user_userid( id ) );
}
}
}
}
ReloadFile( )
{
ArrayClear( g_aDatabase );
new g_iItems[ PlayerData ];
new szFormat[ 64 ], szPlayerData[ 128 ];
formatex( szFormat, charsmax( szFormat ), "%s/%s", g_szConfigs, g_iConfig[ USERS_FILE ] );
new iFile = fopen( szFormat, "rt" );
if( iFile )
{
while( fgets( iFile, szPlayerData, charsmax( szPlayerData ) ) )
{
trim( szPlayerData );
switch( szPlayerData[ 0 ] )
{
case EOS, '#', '/':
{
continue;
}
default:
{
parse( szPlayerData, g_iItems[ Player_Name ], charsmax( g_iItems[ Player_Name ] ), g_iItems[ Player_Password ], charsmax( g_iItems[ Player_Password ] ), g_iItems[ Player_AccessFlags ],
charsmax( g_iItems[ Player_AccessFlags ] ), g_iItems[ Player_Prefix ], charsmax( g_iItems[ Player_Prefix ] ), g_iItems[ Player_Model_T ], charsmax( g_iItems[ Player_Model_T ] ),
g_iItems[ Player_Model_CT ], charsmax( g_iItems[ Player_Model_CT ] ), g_iItems[ Player_Immunity ], charsmax( g_iItems[ Player_Immunity ] ), g_iItems[ Player_Expire_Date ], charsmax( g_iItems[ Player_Expire_Date ] ) );
if( szPlayerData[ 0 ] == ';' )
{
g_iItems[ Player_Suspended ] = true;
replace( g_iItems[ Player_Name ], charsmax( g_iItems[ Player_Name ] ), ";", "" );
}
if( g_iItems[ Player_Expire_Date ][ 0 ] )
{
if( HasAdminExpired( g_iItems[ Player_Expire_Date ] ) )
{
g_iItems[ Player_Suspended ] = true;
}
}
ArrayPushArray( g_aDatabase, g_iItems );
arrayset( g_iItems, 0, sizeof( g_iItems ) );
}
}
}
fclose( iFile );
}
}
ReadIni( )
{
new szFile[ 64 ], szData[ 256 ];
formatex( szFile, charsmax( szFile ), "%s/%s", g_szConfigs, g_szConfigFile );
new iFile = fopen( szFile, "rt" );
if( iFile )
{
while( fgets( iFile, szData, charsmax( szData ) ) )
{
trim( szData );
remove_quotes( szData );
switch( szData[ 0 ] )
{
case EOS, '#', ';', '/':
{
continue;
}
default:
{
new szKey[ 32 ], szValue[ 32 ];
strtok( szData, szKey, charsmax( szKey ), szValue, charsmax( szValue ), '=' );
trim( szKey );
trim( szValue );
remove_quotes( szKey );
remove_quotes( szValue );
if( ! szValue[ 0 ] )
{
continue;
}
if( equal( szKey, "DEAD_PREFIX" ) )
{
g_iConfig[ DEAD_PREFIX ] = szValue;
}
else if( equal( szKey, "SPECTATOR_PREFIX" ) )
{
g_iConfig[ SPECTATOR_PREFIX ] = szValue;
}
else if( equal( szKey, "COMMAND_ADDADMIN" ) )
{
g_iConfig[ COMMAND_ADDADMIN ] = szValue;
}
else if( equal( szKey, "ADMIN_ADD_FLAG" ) )
{
g_iConfig[ ADMIN_ADD_FLAG ] = read_flags( szValue );
}
else if( equal( szKey, "USERS_FILE" ) )
{
g_iConfig[ USERS_FILE ] = szValue;
}
else if( equal( szKey, "SYSTEM_PREFIX" ) )
{
g_iConfig[ SYSTEM_PREFIX ] = szValue;
}
else if( equal( szKey, "TIME_CHECK_ADMINS" ) )
{
g_iConfig[ TIME_CHECK_ADMINS ] = _:str_to_float( szValue );
}
else if( equal( szKey, "BANS_FILE" ) )
{
g_iConfig[ BANS_FILE ] = szValue;
}
else if( equal( szKey, "LOGS_FILE" ) )
{
g_iConfig[ LOGS_FILE ] = szValue;
}
else if( equal( szKey, "NO_ACCESS_COMMAND" ) )
{
g_iConfig[ NO_ACCESS_COMMAND ] = szValue;
}
}
}
}
fclose( iFile );
}
}
CheckDirectory( )
{
new szUsersFile[ 256 ], szBansFile[ 256 ], szConfigFile[ 256 ];
formatex( szUsersFile, charsmax( szUsersFile ), "%s/%s", g_szConfigs, g_iConfig[ USERS_FILE ] );
formatex( szBansFile, charsmax( szBansFile ), "%s/%s", g_szConfigs, g_iConfig[ BANS_FILE ] );
formatex( szConfigFile, charsmax( szConfigFile ), "%s/%s", g_szConfigs, g_szConfigFile );
new iFile;
if( ! file_exists( szUsersFile ) )
{
iFile = fopen( szUsersFile, "w" );
fclose( iFile );
}
if( ! file_exists( szBansFile ) )
{
iFile = fopen( szBansFile, "w" );
fclose( iFile );
}
if( ! file_exists( szConfigFile ) )
{
iFile = fopen( szConfigFile, "w" );
fclose( iFile );
}
return 1;
}
bool:HasAdminExpired( const szDate[ ] )
{
return get_systime( ) >= parse_time( szDate, "%m/%d/%Y - %H:%M:%S" );
}
__________________
|
|