|
Penguin Enthusiast
Join Date: Jun 2016
Location: Macedonia
|

08-05-2018
, 15:24
Re: Setting m_iNumRespawns + Supercede CS_RoundRespawn crashes?
|
#2
|
Quote:
Originally Posted by HamletEagle
I don't know about other mods than cstrike, I would need the mod.so file to find out.
|
EDIT: It must be something wrong with my InstallGameRules signature because my other plugin which uses it crashes the server too.
Code:
{
"name" : "InstallGameRules",
"library" : "mod",
"return" :
{
"type" : "CGameRules *"
},
"identifiers":
[
{
"os" : "windows",
"mod" : "cstrike",
"value" : [0x68,"*","*","*","*",0xFF,"*","*","*","*","*",0x83,"*","*",0xFF,"*","*","*","*","*",0xA1,"*","*","*","*",0xD9,"*","*",0xD8,"*","*","*","*","*",0xDF]
},
{
"os" : "linux",
"mod" : "cstrike",
"value" : "_Z16InstallGameRulesv"
}
]
}
No need, just wondered if you somehow knew, but it doesn't really matter. This is crashing my server, no error logs just this
Code:
./hlds_run: line 255: 26313 Segmentation fault(core dumped) $HL_CMD
PHP Code:
new g_pGameRules;
public plugin_precache( ) OrpheuRegisterHook( OrpheuGetFunction( "InstallGameRules" ), "OnInstallGameRules", OrpheuHookPost );
public plugin_init( ) { OrpheuRegisterHookFromObject( g_pGameRules, "FPlayerCanRespawn", "CGameRules", "@FPlayerCanRespawn" ); }
public OnInstallGameRules( ) { g_pGameRules = OrpheuGetReturn( ); }
public OrpheuHookReturn:@FPlayerCanRespawn(pGameRules, id) { OrpheuSetReturn( false ) return OrpheuOverride; }
Full:
PHP Code:
#include < amxmodx > #include < cstrike > #include < hamsandwich > #include < fakemeta > #include < engine > #include < cs_battleroyale_faketeams > #include < orpheu > #include < orpheu_stocks >
#define MAX_PLAYERS 32
#if AMXX_VERSION_NUM >= 182 #define CSW_GLOCK 2 #define client_disconnect client_disconnected #endif
enum _:Tasks ( += 1000 ) { TASK_1 = 1000, TASK_2, TASK_3 };
enum _:PlayerStats { Player_Kills, Player_HeadShots, Float:Player_Damage,
Player_StatsCount };
new g_iSyncHudObject; new g_iTime; new g_iDummyResult;
new g_iFwRoundStart; new g_iFwTeamDead; new g_iFwRoundWinner;
new g_iCvarTimer; new g_iCvarMinPlayers; new g_iCvarSvRestart;
new g_pGameRules;
new g_iPlayerStats[ MAX_PLAYERS + 1 ][ Player_StatsCount ];
new bool:g_bHasGameStarted; new bool:g_bVictoryBlockAttack[ 33 ];
const m_LastHitGroup = 75;
const g_iSkip = ( 1 << CSW_GLOCK ) | ( 1 << CSW_C4 )
public plugin_precache( ) OrpheuRegisterHook( OrpheuGetFunction( "InstallGameRules" ), "OnInstallGameRules", OrpheuHookPost );
public plugin_init( ) { register_plugin( "CS Battle Royale Round Manager", "2.0", "DoNii" ); OrpheuRegisterHookFromObject( g_pGameRules, "FPlayerCanRespawn", "CGameRules", "@FPlayerCanRespawn" ); g_iFwRoundStart = CreateMultiForward( "RoundStarted", ET_IGNORE ); g_iFwTeamDead = CreateMultiForward( "TeamDead", ET_IGNORE, FP_CELL, FP_CELL ); g_iFwRoundWinner = CreateMultiForward( "RoundWinner", ET_IGNORE, FP_CELL ); g_iSyncHudObject = CreateHudSyncObj( ); g_iCvarTimer = register_cvar( "csbr_round_timer", "15" ); g_iCvarMinPlayers = register_cvar( "csbr_min_players", "2" ); g_iCvarSvRestart = get_cvar_pointer( "sv_restartround" ); register_logevent( "OnNewRound", 2, "1=Round_Start" ); RegisterHam( Ham_Killed, "player", "@HamKilled_Post", 1 ); RegisterHam( Ham_TakeDamage, "player", "@HamTakeDamage_Pre", 0 ); RegisterHam( Ham_CS_RoundRespawn, "player", "@HamCSRoundRespawn_Pre", 0 ); new szWeaponName[ 32 ]; for( new i = CSW_P228; i <= CSW_P90; i++ ) { if( g_iSkip & ( 1 << i ) ) continue; get_weaponname( i, szWeaponName, charsmax( szWeaponName ) ); RegisterHam( Ham_Weapon_PrimaryAttack, szWeaponName, "@HamPrimaryAttack_Pre" ); } }
public plugin_natives( ) { register_library( "cs_battleroyale_roundmanager" );
register_native( "HasGameStarted", "OnNativeHasGameStarted", 1 ); register_native( "IsLastTeam", "OnNativeIsLastTeam", 1 ); register_native( "GetTeamAlivePlayers", "OnNativeGetTeamAlivePlayers", 1 ); register_native( "GetRemainingTeams", "OnNativeGetRemainingTeams", 1 ); }
public client_disconnect( id ) { ResetStats( id );
if( GetAlivePlayers( ) < get_pcvar_num( g_iCvarMinPlayers ) ) { RestartRound( 3 ); client_print( 0, print_chat, "Player left, restarting Round due to insufficient players" ); } return PLUGIN_CONTINUE; }
public OnInstallGameRules( ) { g_pGameRules = OrpheuGetReturn( ); }
public OrpheuHookReturn:@FPlayerCanRespawn(pGameRules, id) { OrpheuSetReturn( false ) return OrpheuOverride; }
public @HamCSRoundRespawn_Pre( id ) { if( g_bHasGameStarted || ! GetPlayerTeam( id ) ) return HAM_SUPERCEDE; return HAM_IGNORED; }
@HamTakeDamage_Pre( iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits ) { if( ! g_bHasGameStarted ) return HAM_SUPERCEDE; if( ! is_user_connected( iAttacker ) ) return HAM_IGNORED; if( ( iDamageBits & DMG_BULLET ) || ( iDamageBits & DMG_GENERIC ) ) { g_iPlayerStats[ iAttacker ][ Player_Damage ] += fDamage; if( get_pdata_int( iVictim, m_LastHitGroup ) == HIT_HEAD ) { g_iPlayerStats[ iAttacker ][ Player_HeadShots ]++; } } return HAM_IGNORED; }
@HamPrimaryAttack_Pre( iEnt ) { new id = pev( iEnt, pev_owner ); if( g_bVictoryBlockAttack[ id ] ) { const m_bCanShoot = 876/4; set_pdata_int( id, m_bCanShoot, false ); return HAM_SUPERCEDE; } return HAM_IGNORED; }
public OnNewRound( ) { EnableShooting( );
g_bHasGameStarted = false; CleanTasks( ); g_iTime = get_pcvar_num( g_iCvarTimer );
if( get_playersnum( ) < get_pcvar_num( g_iCvarMinPlayers ) ) { set_task( 1.0, "OnTaskFindPlayers", TASK_2, .flags = "b" ); } else { set_task( 1.0, "OnTaskCountDown", TASK_1, .flags = "b" ); } }
public OnTaskFindPlayers( ) { if( GetAlivePlayers( ) >= get_pcvar_num( g_iCvarMinPlayers ) ) { RestartRound( 3 ); CleanTasks( ); } }
public OnTaskCountDown( ) { if( g_iTime <= 0 ) { g_bHasGameStarted = true; ExecuteForward( g_iFwRoundStart, g_iDummyResult ); CleanTasks( ); } else { set_hudmessage( 0, 255, 0, 0.35, 0.35, 0, 0.0, 1.1 ) ShowSyncHudMsg( 0, g_iSyncHudObject, "%L", LANG_PLAYER, "ROUND_STARTS_IN", g_iTime--, ( g_iTime > 1 ) ? "s" : "" ); } }
public @HamKilled_Post( iVictim, iAttacker, iShouldGib ) { if( g_bHasGameStarted ) { new szClassName[ 32 ]; pev( iAttacker, pev_classname, szClassName, charsmax( szClassName ) ); if( GetTeamAlivePlayers( GetPlayerTeam( iVictim ) ) == 0 ) { BetterLuckNextTime( iVictim, GetPlayerTeam( iVictim ) ); } if( equal( szClassName, "player" ) && is_user_connected( iAttacker ) ) { if( iVictim != iAttacker ) { g_iPlayerStats[ iAttacker ][ Player_Kills ]++; } if( IsLastTeam( GetPlayerTeam( iAttacker ) ) ) { Winner_Direct( GetPlayerTeam( iAttacker ) ); } } else if( ! equal( szClassName, "player" ) || ! is_user_connected( iAttacker ) ) { if( GetRemainingTeams( ) == 1 ) Winner_Find( ); } } return HAM_IGNORED; }
Winner_Find( ) { new iWinnerTeam;
new szPlayers[ 32 ], iNum; get_players( szPlayers, iNum, "ah" );
new iTempID; for( new i; i < iNum; i++ ) { iTempID = szPlayers[ i ];
ShowMotd( iTempID ); g_bVictoryBlockAttack[ iTempID ] = true; iWinnerTeam = GetPlayerTeam( iTempID ); }
iNum = 0; szPlayers[ 0 ] = EOS; iTempID = 0;
if( GetPlayersInTeam( iWinnerTeam ) > 1 ) { get_players( szPlayers, iNum, "bh" );
for( new i; i < iNum; i++ ) { iTempID = szPlayers[ i ];
ShowMotd( iTempID ); } } }
Winner_Direct( iTeam ) { g_bHasGameStarted = false; ExecuteForward( g_iFwRoundWinner, g_iDummyResult, iTeam );
RestartRound( 5 ); client_print( 0, print_center, "%L", LANG_PLAYER, "ROUND_WINNER", iTeam ); new szPlayers[ 32 ], iNum; get_players( szPlayers, iNum, "h" );
new iTempID; for( new i; i < iNum; i++ ) { iTempID = szPlayers[ i ];
if( GetPlayerTeam( iTempID ) == iTeam ) { ShowMotd( iTempID ); if( is_user_alive( iTempID ) ) g_bVictoryBlockAttack[ iTempID ] = true; } } }
ShowMotd( id ) { new szMotdInfo[ 512 ], szName[ 32 ]; get_user_name( id, szName, charsmax( szName ) );
formatex( szMotdInfo, charsmax( szMotdInfo ), "<body bgcolor=^"black^"><font color=^"white^">Player Name: %s <br>Kills: %d <br>Damage: %.1f <br>Headshots: %d<br> <img src=^"https://res.cloudinary.com/teepublic/image/private/s--SOYOT-Oh--/t_Preview/b_rgb:000000,c_limit,f_jpg,h_630,q_90,w_630/v1531417103/production/designs/2883853_0.jpg^" height=^"324^" width=^"324^">", szName, g_iPlayerStats[ id ][ Player_Kills ], g_iPlayerStats[ id ][ Player_Damage ], g_iPlayerStats[ id ][ Player_HeadShots ] ); show_motd( id, szMotdInfo, "Stats" ); ResetStats( id ); }
GetTeamAlivePlayers( iTeam ) { new szPlayers[ 32 ], iNum, iTempID, iCount; get_players( szPlayers, iNum, "ah" ); for( new i; i < iNum; i++ ) { iTempID = szPlayers[ i ]; if( GetPlayerTeam( iTempID ) == iTeam ) { iCount++; } } return iCount; }
bool:IsLastTeam( iTeam ) { new bool:bAnnounceWinner; for( new i = 1; i <= GetMaxTeams( ); i++ ) { if( iTeam == i ) continue; if( GetTeamAlivePlayers( i ) <= 0 ) { bAnnounceWinner = true; continue; } else { bAnnounceWinner = false; break; } } return bAnnounceWinner; }
GetAlivePlayers( ) { new szPlayers[ 32 ], iNum; get_players( szPlayers, iNum, "ah" ); return iNum; }
RestartRound( const iTime ) { set_pcvar_num( g_iCvarSvRestart, iTime ); }
BetterLuckNextTime( iPlayer, iTeam ) { ExecuteForward( g_iFwTeamDead, g_iDummyResult, iPlayer, iTeam );
if( GetPlayersInTeam( iTeam ) > 1 ) { new szPlayers[ 32 ], iNum, iTempID; get_players( szPlayers, iNum, "bh" ); for( new i; i < iNum; i++ ) { iTempID = szPlayers[ i ]; if( ( GetPlayerTeam( iTempID ) == GetPlayerTeam( iPlayer ) ) ) { client_print( iTempID, print_center, "%L", iTempID, "YOUR_TEAM_PLACED", GetRemainingTeams( ) + 1 ); } } } else if( GetPlayerPerTeam( ) == 1 ) { client_print( iPlayer, print_center, "%L", iPlayer, "YOUR_TEAM_PLACED", GetRemainingTeams( ) + 1 ); } }
GetRemainingTeams( ) { new iRemainingTeams;
for( new iTeam = 1; iTeam <= GetMaxTeams( ); iTeam++ ) { if( GetTeamAlivePlayers( iTeam ) >= 1 ) { iRemainingTeams++; } } return iRemainingTeams; }
ResetStats( id ) { g_iPlayerStats[ id ][ Player_Damage ] = _:0.0; g_iPlayerStats[ id ][ Player_HeadShots ] = 0; g_iPlayerStats[ id ][ Player_Kills ] = 0; }
CleanTasks( ) { remove_task( TASK_1 ); remove_task( TASK_2 ); remove_task( TASK_3 ); }
EnableShooting( ) { new szPlayers[ 32 ], iNum; get_players( szPlayers, iNum, "h" );
new iTempID; for( new i; i < iNum; i++ ) { iTempID = szPlayers[ i ];
g_bVictoryBlockAttack[ iTempID ] = false; } }
public OnNativeHasGameStarted( ) { return g_bHasGameStarted; }
public OnNativeIsLastTeam( iTeam ) { return IsLastTeam( iTeam ); }
public OnNativeGetTeamAlivePlayers( iTeam ) { return GetTeamAlivePlayers( iTeam ); }
public OnNativeGetRemainingTeams( ) { return GetRemainingTeams( ); }
Signature
Code:
{
"name" : "FPlayerCanRespawn",
"class" : "CGameRules",
"library" : "mod",
"return" :
{
"type" : "bool"
},
"arguments" :
[
{
"type" : "CBasePlayer *"
}
],
"indexes" :
[
{
"os" : "windows",
"mod" : "SvenCoop",
"value" : 22
},
{
"os" : "windows",
"mod" : "cstrike",
"value" : 22
},
{
"os" : "linux",
"mod" : "cstrike",
"value" : 22
},
{
"os" : "windows",
"mod" : "dod",
"value" : 20
},
{
"os" : "linux",
"mod" : "dod",
"value" : 22
},
{
"os" : "windows",
"mod" : "valve",
"value" : 20
},
{
"os" : "linux",
"mod" : "valve",
"value" : 22
},
{
"os" : "windows",
"mod" : "ns",
"value" : 20
},
{
"os" : "linux",
"mod" : "ns",
"value" : 22
},
{
"os" : "windows",
"mod" : "ts",
"value" : 19
},
{
"os" : "linux",
"mod" : "ts",
"value" : 21
},
{
"os" : "windows",
"mod" : "tfc",
"value" : 20
},
{
"os" : "linux",
"mod" : "tfc",
"value" : 22
}
]
}
EDIT: 20 crashes too
__________________
Last edited by edon1337; 08-05-2018 at 15:50.
|
|