Для таких случаев есть параметр timeout, который по умолчанию равен 60. Отсюда и зависание. 5-10 сек хватает.сервер виснит и ждет ответа
plugin_end - не смена карты? Ну вызывается дисконнект игрока раньше, ну подготовь запрос для вышедшего игрока (кстати, в reapi вынесен ClientDrop, который вызывается непосредственно при дисконнекте игрока, т.е. при смене карты, если игрок не отсоединился, форвард не должен вызваться).@d3m37r4, как я узнаю, когда будет смена карты?
смена, процесс работы я описал выше, нужно не костыли придумывать а фиксить работу модулей, я так думаю.plugin_end - не смена карты?
и не будет.В сорсе додумались до этого, а тут до сих пор ничего путного нету.
public hook_PlayerKilled_Post( const iVictim, const iKiller )
{
if( iVictim == iKiller )
{
rg_send_audio( 0, KILL_SOUND[ ST__SUICIDE ] );
return HC_CONTINUE;
}
if( !is_user_connected( iKiller ) )
{
return HC_CONTINUE;
}
new iInflictor = get_entvar( iVictim, var_dmg_inflictor );
if( iInflictor != iKiller )
{
if( get_member( iVictim, m_bKilledByGrenade ) )
{
rg_send_audio( 0, KILL_SOUND[ ST__GRENADE ] );
}
}
return HC_CONTINUE;
}
Всегда? Если да, то можно проверять факт убийства других, до того как убьёшь себя самого. Если кого-то убило, то не воспроизводить ST__SUICIDE.хук hook_PlayerKilled_Post на убийство самого себя вызывается в последнюю очередь
не уверен, но по тестам показывает, что всегдаВсегда?
public func_NextFrame( const id )
{
if( g_bSuicide[ id ] && g_iNumKilled[ id ] <= 1 )
{
rg_send_audio( 0, KILL_SOUND[ ST__SUICIDE ] );
}
g_iNumKilled[ id ] = 0;
g_bSuicide[ id ] = false;
}
public hook_PlayerKilled_Post( const iVictim, const iKiller )
{
if( !is_user_connected( iKiller ) )
{
return HC_CONTINUE;
}
RequestFrame( "func_NextFrame", iKiller );
g_iNumKilled[ iKiller ]++;
if( iVictim == iKiller )
{
g_bSuicide[ iKiller ] = true;
return HC_CONTINUE;
}
new iInflictor = get_entvar( iVictim, var_dmg_inflictor );
if( iInflictor != iKiller )
{
if( get_member( iVictim, m_bKilledByGrenade ) )
{
rg_send_audio( 0, KILL_SOUND[ ST__GRENADE ] );
}
else if( get_member( iVictim, m_bKilledByBomb ) )
{
rg_send_audio( 0, KILL_SOUND[ ST__BOMB ] );
}
}
return HC_CONTINUE;
}