Quote:
Originally Posted by ^SmileY
You need to force the player stop shooting before call show_motd
Also here
g_iMaxTeams = get_pcvar_num( g_iCvars[ 0 ] );
g_iPlayerPerTeam = get_pcvar_num( g_iCvars[ 1 ] );
Is fine, is not needed to move into plugin_cfg.
but why not use get_pcvar_num( g_iCvars[ 0 ] ) on plugin, instead of g_iMaxTeams, is needed to fix this variable to initial value? same to other g_iPlayerPerTeam??
|
g_iMaxTeams is just a variable that holds the cached value of
cs_battleroyale_team_num CVAR, is that what you asked?
Full code here, if you want to check:
PHP Code:
#include < amxmodx >
#include < hamsandwich >
#include < fakemeta >
#include < fun >
#include < cstrike >
#define MAX_PLAYERS 32
#define NO_TEAM 0
new g_iPlayerPerTeam;
new g_iMaxTeams;
new g_iCvars[ 2 ];
new g_iTeammates[ MAX_PLAYERS + 1 ];
new g_iPlayerTeam[ MAX_PLAYERS + 1 ];
new HamHook:g_iHamTakeDamageFw;
new HamHook:g_iHamTraceAttackFw;
new HamHook:g_iHamKilledFw;
public plugin_init( )
{
register_plugin( "CS Battle Royale Fake Teams", "1.0", "DoNii" );
g_iCvars[ 0 ] = register_cvar( "cs_battleroyale_team_num", "6" ); // number of teams
g_iCvars[ 1 ] = register_cvar( "cs_battleroyale_player_per_team", "4" ); // number of players in one team
g_iMaxTeams = get_pcvar_num( g_iCvars[ 0 ] );
g_iPlayerPerTeam = get_pcvar_num( g_iCvars[ 1 ] );
register_event( "HLTV", "OnNewRound", "a", "1=0", "2=0" );
g_iHamTakeDamageFw = RegisterHam( Ham_TakeDamage, "player", "fw_HamTakeDamagePre", 0 );
DisableHamForward( g_iHamTakeDamageFw );
g_iHamTraceAttackFw = RegisterHam( Ham_TraceAttack, "player", "fw_HamTraceAttackPre", 0 );
DisableHamForward( g_iHamTraceAttackFw );
g_iHamKilledFw = RegisterHam( Ham_Killed, "player", "fw_HamKilledPre", 0 );
DisableHamForward( g_iHamKilledFw );
}
public plugin_cfg( )
{
EnableHamForward( g_iHamTakeDamageFw );
EnableHamForward( g_iHamTraceAttackFw );
EnableHamForward( g_iHamKilledFw );
}
public plugin_natives( )
{
register_library( "cs_battleroyale_faketeams" );
register_native( "GetPlayerTeam", "OnNativeGetPlayerTeam", 1 );
register_native( "SetPlayerTeam", "OnNativeSetPlayerTeam", 1 );
register_native( "GetMaxTeams", "OnNativeGetMaxTeams", 1 );
register_native( "SetMaxTeams", "OnNativeSetMaxTeams", 1 );
register_native( "GetPlayerPerTeam", "OnNativeGetPlayerPerTeam", 1 );
register_native( "SetPlayerPerTeam", "OnNativeSetPlayerPerTeam", 1 );
}
public OnNativeGetPlayerTeam( id )
{
if( ! is_user_connected( id ) )
return -1;
return g_iPlayerTeam[ id ];
}
public OnNativeSetPlayerTeam( id, iTeam )
{
if( ! is_user_connected( id ) )
return -1;
g_iPlayerTeam[ id ] = iTeam;
return 1;
}
public OnNativeGetMaxTeams( )
{
return g_iMaxTeams;
}
public OnNativeSetMaxTeams( iValue )
{
if( !( 1 <= iValue <= MAX_PLAYERS ) )
return -1;
g_iMaxTeams = iValue;
return 1;
}
public OnNativeGetPlayerPerTeam( )
{
return g_iPlayerPerTeam;
}
public OnNativeSetPlayerPerTeam( iValue )
{
if( !( 1 <= iValue <= MAX_PLAYERS ) )
return -1;
g_iPlayerPerTeam = iValue;
return 1;
}
public client_disconnect( id )
{
if( g_iPlayerTeam[ id ] != NO_TEAM )
{
g_iTeammates[ g_iPlayerTeam[ id ] ]--;
g_iPlayerTeam[ id ] = NO_TEAM;
}
g_iPlayerTeam[ id ] = NO_TEAM;
}
public client_connect( id )
{
g_iPlayerTeam[ id ] = NO_TEAM;
FindAvailableTeam( id );
}
public fw_HamKilledPre( iVictim, iAttacker, iShouldGib )
{
if( iVictim == iAttacker )
return HAM_IGNORED;
new iVictimTeam = get_user_team( iVictim );
if( g_iPlayerTeam[ iVictim ] != g_iPlayerTeam[ iAttacker ] )
{
if( iVictimTeam == get_user_team( iAttacker ) )
{
cs_set_user_team( iVictim, iVictimTeam == 1 ? 2 : 1 );
}
return HAM_IGNORED;
}
return HAM_SUPERCEDE;
}
public fw_HamTraceAttackPre( iVictim, iAttacker, Float:fDamage, Float:fDir[ 3 ], iPtr, iDamageType )
{
if( iVictim == iAttacker )
return HAM_IGNORED;
new iVictimTeam = get_user_team( iVictim );
if( g_iPlayerTeam[ iVictim ] != g_iPlayerTeam[ iAttacker ] )
{
if( iVictimTeam == get_user_team( iAttacker ) )
{
cs_set_user_team( iVictim, iVictimTeam == 1 ? 2 : 1 );
ExecuteHamB( Ham_TraceAttack, iVictim, iAttacker, fDamage, fDir, iPtr, iDamageType);
cs_set_user_team( iVictim, iVictimTeam );
}
return HAM_IGNORED;
}
SetHamParamFloat( 3, 0.0 );
return HAM_SUPERCEDE;
}
public fw_HamTakeDamagePre( iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits )
{
if( iVictim == iAttacker )
return HAM_IGNORED;
new iVictimTeam = get_user_team( iVictim );
if( g_iPlayerTeam[ iVictim ] != g_iPlayerTeam[ iAttacker ] )
{
if( iVictimTeam == get_user_team( iAttacker ) )
{
cs_set_user_team( iVictim, iVictimTeam == 1 ? 2 : 1 );
ExecuteHamB( Ham_TakeDamage, iVictim, iInflictor, iAttacker, fDamage, iDamageBits );
cs_set_user_team( iVictim, iVictimTeam );
}
return HAM_IGNORED;
}
SetHamParamFloat( 4, 0.0 );
return HAM_SUPERCEDE;
}
public OnNewRound( )
{
static szPlayers[ 32 ], iNum;
get_players( szPlayers, iNum, "a" );
static iTempID;
for( new i; i < iNum; i++ )
{
iTempID = szPlayers[ i ];
if( g_iPlayerTeam[ iTempID ] == NO_TEAM && ( ( 1 <= get_user_team( iTempID ) <= 2 ) ) )
{
FindAvailableTeam( iTempID );
}
}
}
FindAvailableTeam( id )
{
for( new iTeam=1; iTeam <= g_iMaxTeams; iTeam++ )
{
if( IsTeamAvailable( iTeam ) )
{
g_iPlayerTeam[ id ] = iTeam;
g_iTeammates[ iTeam ]++;
break;
}
continue;
}
}
IsTeamAvailable( iTeam )
{
return g_iTeammates[ iTeam ] < g_iPlayerPerTeam ? 1 : 0;
}
Quote:
Originally Posted by CrazY.
That's considered a bug, the same happens if you hold IN_ATTACK and open the console. I believe you can fix that "holstering" and "deploying" the active item of the player when motd be shown. Or you can "supercede" the primary attack if the motd is current opened.
I'm not sure, but you need to set these variables in plugin_cfg, not in plugin_init.
Code:
g_iMaxTeams = get_pcvar_num( g_iCvars[ 0 ] );
g_iPlayerPerTeam = get_pcvar_num( g_iCvars[ 1 ] );
|
I already tried using plugin_cfg but it didn't change anything.
About the MOTD thanks I'll try it.
__________________