| edon1337 |
07-10-2018 12:35 |
Re: Weapon firing when MOTD appears | CVAR not updating |
Quote:
Originally Posted by ^SmileY
(Post 2602643)
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.
(Post 2602641)
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.
|