You can test that.
Unzip in amxmodx/ directory.
What it does :
1/ Hook when a round restart is triggered
2/ Retrieve current team scores
3/ Block coming TeamScore message (because it's updated right away)
4/ Switch team scores
5/ Update scores on scoreboard.
PHP Code:
#include <amxmodx>
#include <orpheu>
#include <orpheu_memory>
/*
│ PLUGIN
*/
new const PluginName [] = "Switch Team Score On Restart";
new const PluginVersion[] = "1.0";
new const PluginAuhtor [] = "Arkshine";
/*
| RESTART HANDLING
*/
enum GameRulesMembers
{
m_iNumTerroristWins,
m_iNumCTWins,
m_bCompleteReset,
m_bFirstConnected,
};
new const GameRulesMI[ GameRulesMembers ][] =
{
"m_iNumTerroristWins",
"m_iNumCTWins",
"m_bCompleteReset",
"m_bFirstConnected"
};
new g_pGameRules;
#define set_mp_pdata(%1,%2) ( OrpheuMemorySetAtAddress( g_pGameRules, GameRulesMI[ %1 ], 1, %2 ) )
#define get_mp_pdata(%1) ( OrpheuMemoryGetAtAddress( g_pGameRules, GameRulesMI[ %1 ] ) )
new CurrentTerroristWins;
new CurrentCTWins;
new TeamScoreMessageIndex;
new bool:ReadyToSwitch;
public plugin_precache()
{
OrpheuRegisterHook( OrpheuGetFunction( "InstallGameRules" ), "OnInstallGameRules", OrpheuHookPost );
}
public OnInstallGameRules()
{
g_pGameRules = OrpheuGetReturn();
}
public plugin_init()
{
register_plugin( PluginName, PluginVersion, PluginAuhtor );
handleForward();
}
public plugin_cfg()
{
TeamScoreMessageIndex = get_user_msgid( "TeamScore" );
}
handleForward()
{
new OrpheuFunction:handleFunc = OrpheuGetFunctionFromObject( g_pGameRules, "RestartRound", "CGameRules" );
OrpheuRegisterHook( handleFunc, "OnRestartRound_Pre" , OrpheuHookPre );
OrpheuRegisterHook( handleFunc, "OnRestartRound_Post" , OrpheuHookPost );
}
public OnRestartRound_Pre( const handleGameRules )
{
if( get_mp_pdata( m_bCompleteReset ) )
{
CurrentTerroristWins = get_mp_pdata( m_iNumTerroristWins );
CurrentCTWins = get_mp_pdata( m_iNumCTWins );
set_msg_block( TeamScoreMessageIndex, BLOCK_SET );
ReadyToSwitch = true;
}
}
public OnRestartRound_Post( const handleGameRules )
{
if( ReadyToSwitch )
{
ReadyToSwitch = false;
set_mp_pdata( m_iNumTerroristWins, CurrentCTWins );
set_mp_pdata( m_iNumCTWins, CurrentTerroristWins );
set_msg_block( TeamScoreMessageIndex, BLOCK_NOT );
updateTeamScore();
}
}
updateTeamScore()
{
static OrpheuFunction:handleFunc; handleFunc || ( handleFunc = OrpheuGetFunction( "UpdateTeamScores", "CHalfLifeMultiplay" ) );
OrpheuCallSuper( handleFunc, g_pGameRules );
}