Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Output в консоли
Vitaminoz Дата: Пятница, 14.02.2014, 23:46:42 | Сообщение # 1
Сообщений: 141
Репутация: 1 [ +/- ]
Всем привет. Возможно ли каким то образом отловить сообщение в консоли (к примеру я написал какую-то команду) Он мне пишет какой то Output. К примеру возьмем консольную команду changelevel, если ей написать и карта валидна, то Output команды :
Код
CHANGE LEVEL : %s
Где %s название карты. Так вот вопрос. Мне нужно из данного Output взять слова. Какой функцией, либо чем-то еще можно это сделать ?

Добавлено (14.02.2014, 23:46:42)
---------------------------------------------
Кто нибудь поможет вообще ?

 
sssw Дата: Суббота, 15.02.2014, 12:19:35 | Сообщение # 2
Сообщений: 123
Репутация: 14 [ +/- ]
Забавно то что в ES_Tools это делается одной командой. Копирует всё в переменную что отображается в консоль.
Придётся искать текст в памяти. Ну или посмотреть реализацию ServerCommandEx.

Код
static cell_t sm_ServerCommandEx(IPluginContext *pContext, const cell_t *params)
{
   g_SourceMod.SetGlobalTarget(SOURCEMOD_SERVER_LANGUAGE);

   char buffer[1024];
   size_t len = g_SourceMod.FormatString(buffer, sizeof(buffer)-2, pContext, params, 3);

   if (pContext->GetLastNativeError() != SP_ERROR_NONE)
   {
    return 0;
   }

   /* One byte for null terminator, one for newline */
   buffer[len++] = '\n';
   buffer[len] = '\0';

   pContext->LocalToString(params[1], &g_ServerCommandBuffer);
   g_ServerCommandBufferLength = params[2];
     
   if (g_ServerCommandBufferLength > 0)
   {
    g_ServerCommandBuffer[0] = '\0';
   }

   engine->ServerExecute();

   g_ShouldCatchSpew = true;
   engine->ServerCommand("sm_conhook_start\n");
   engine->ServerCommand(buffer);
   engine->ServerCommand("sm_conhook_stop\n");

   engine->ServerExecute();

   if (g_ServerCommandBufferLength > 0)
   {
    g_ServerCommandBuffer[g_ServerCommandBufferLength-1] = '\0';
   }

   g_ServerCommandBuffer = NULL;
   g_ServerCommandBufferLength = 0;

   return 1;
}


Сообщение отредактировал sssw - Воскресенье, 16.02.2014, 05:52:47
 
Vitaminoz Дата: Суббота, 15.02.2014, 16:47:37 | Сообщение # 3
Сообщений: 141
Репутация: 1 [ +/- ]
Спасибо буду пробывать.

Добавлено (15.02.2014, 16:47:37)
---------------------------------------------
ServerCommandEx помог, спасибо.

 
  • Страница 1 из 1
  • 1
Поиск: