Разрешить действие @all от имени сервера

Zakhar Revin

Участник
Сообщения
218
Реакции
28
Добрый день. Есть плагин на АллиесМод, выводит заранее заготовленный оверлей игрокам. Работает только от лица админа с нужным правом доступа, командами sm_fun <#userid|name>. Когда пробуешь
sm_fun @me или sm_fun @All, все ок. А когда от лица консоли, sm_rcon sm_fun @All, то в лог ошибка вида:
C-подобный:
L 08/26/2018 - 13:31:11: [SM] Exception reported: Client index 0 is invalid
L 08/26/2018 - 13:31:11: [SM] Blaming: dmffaoverlay++.smx
L 08/26/2018 - 13:31:11: [SM] Call stack trace:
L 08/26/2018 - 13:31:11: [SM]   [0] IsFakeClient
L 08/26/2018 - 13:31:11: [SM]   [1] Line 232, plugin.sp::Windows
L 08/26/2018 - 13:31:11: [SM]   [2] Line 111, plugin.sp::Command_Windows
Может кто подсказать, как разрешить слать это от имени сервера? Заранее спасибо.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #2
@Zakhar Revin, у меня кое-какие несовпадения по строкам.
Хотя в любом случае: находим функцию Windows:
PHP:
stock Windows(Client, target)
{
	if ( target > 0 && target <= MaxClients )
	{
		if ( IsClientConnected(target) && IsClientInGame(target) && !IsFakeClient(Client) )
		{
			EmitSoundToClient(target, WindowsSound);
			ClientCommand(target, "r_screenoverlay \"%s\"", WindowsVMT);
			
			CreateTimer(WindowsTimer, Timer_FunEnd, target, TIMER_FLAG_NO_MAPCHANGE);
		}
	}
}
Заменяем !IsFakeClient(Client) на !IsFakeClient(target)
PHP:
stock Windows(Client, target)
{
	if ( target > 0 && target <= MaxClients )
	{
		if ( IsClientConnected(target) && IsClientInGame(target) && !IsFakeClient(target) )
		{
			EmitSoundToClient(target, WindowsSound);
			ClientCommand(target, "r_screenoverlay \"%s\"", WindowsVMT);
			
			CreateTimer(WindowsTimer, Timer_FunEnd, target, TIMER_FLAG_NO_MAPCHANGE);
		}
	}
}
 

Zakhar Revin

Участник
Сообщения
218
Реакции
28
Премного благодарен! Ушел пробовать)

update - Ура, действительно работает!
 
Последнее редактирование:
Сверху Снизу