- Поддерживаемые игры
-
- CS: GO
Плагин для CS:GO: Исправление ошибки NetMsg_StringCmd
Этот плагин предназначен для исправления ошибки в CS:GOкоторая связана с обработкой сетевых сообщений и может вызывать сбои в игре. Плагин перехватывает вызов функции ProcessPacketHeader, чтобы предотвратить ошибки, вызванные слишком большими сетевыми пакетами.
Как это работает
1. Структура плагина
Плагин написан на SourceMod и использует динамический детуринг (перехват функций) для изменения поведения игры. В плагине заданы основные параметры, создается объект для работы с детурингом и производится настройка перехвата функций.2. Загрузка данных и настройка детуринга
В функции OnPluginStart:- Загрузка файла данных: Плагин ищет и загружает файл hvhgg_netmsg_crash_fix.txt, который содержит сигнатуры функций и другую необходимую информацию для работы детуринга.
- Создание и активация детуринга: Используется объект DynamicDetour для перехвата функции ProcessPacketHeader. Если что-то идет не так (например, файл не найден или не удалось создать детуринг), плагин завершает работу с ошибкой.
3. Перехват функции
Функция ProcessPacketHeader_Pre выполняется до вызова оригинальной функции ProcessPacketHeader:- Получение адреса пакета: Проверяется размер пакета, переданный в функцию. Если размер превышает 2000 байт, функция предотвращает дальнейшее выполнение оригинальной функции, устанавливая значение hReturn.Value в -1 и возвращая MRES_Supercede. Если размер в пределах допустимого, оригинальная функция выполняется как обычно (возвращается MRES_Ignored).
4. Завершение работы
В функции OnPluginEnd:- Отключение перехвата: При завершении работы плагина отключается перехват функции ProcessPacketHeader, если он был активирован.
Примечания
- Файл данных: Файл hvhgg_netmsg_crash_fix.txt должен содержать правильные сигнатуры функций для работы плагина. Убедитесь, что этот файл находится в папке gamedata вашего сервера.
- Сигнатуры функций: В плагине используется сигнатура для функции ProcessPacketHeader, которая определяет, как найти эту функцию в памяти игры.
Использование
Просто загрузите плагин на сервер CS:GOи убедитесь, что файл hvhgg_netmsg_crash_fix.txt находится в правильной папке. Плагин автоматически перехватит функцию и будет предотвращать ошибки, связанные с большими сетевыми пакетами.
Заключение
Этот плагин поможет избежать сбоев в CS:GOсвязанных с ошибками в обработке сетевых сообщений. Он прост в установке и использовании, и эффективно решает проблему с ошибками, вызванными переполнением сетевых пакетов.
Исходный код плагина:
C-подобный:
#include <sourcemod>
#include <sdkhooks>
#include <dhooks>
public Plugin:myinfo =
{
name = "HvH.gg NetMsg Crash Fix",
author = "imi-tat0r & philip015",
description = "Fixes a crash related to NetMsg_StringCmd",
version = "1.0.0",
}
DynamicDetour dDetour;
public void OnPluginStart()
{
// Load signature from gamedata file
char buffer[PLATFORM_MAX_PATH];
BuildPath(Path_SM, buffer, sizeof buffer, "gamedata/hvhgg_netmsg_crash_fix.txt");
if (!FileExists(buffer))
SetFailState("\n==========\nMissing required file: \"%s\".\n==========", buffer);
GameData hGameData = new GameData("hvhgg_netmsg_crash_fix");
if (!hGameData)
SetFailState("Failed to load \"hvhgg_netmsg_crash_fix.txt\" gamedata.");
dDetour = DynamicDetour.FromConf(hGameData, "ProcessPacketHeader");
if (!dDetour)
SetFailState("Failed to create DynamicDetour: \"ProcessPacketHeader\"");
if (!dDetour.Enable(Hook_Pre, ProcessPacketHeader_Pre))
SetFailState("Failed to detour pre: \"ProcessPacketHeader\"");
}
MRESReturn ProcessPacketHeader_Pre(DHookReturn hReturn, DHookParam hParams)
{
Address addr = hParams.GetAddress(1);
if (!addr)
return MRES_Ignored;
int size = LoadFromAddress(addr + view_as<Address>(0x54), NumberType_Int32);
// arbitrary value, we might change that
if (size > 2000)
{
hReturn.Value = -1;
return MRES_Supercede;
}
return MRES_Ignored;
}
public void OnPluginEnd()
{
if (dDetour)
dDetour.Disable(Hook_Pre, ProcessPacketHeader_Pre);
}
- Требования
-
Зависимости и Требования
- SourceMod: Необходима последняя версия SourceMod для работы плагина.
- SDKHooks: Требуется для обработки перехватов функций.
- DynamicHook (DHooks): Для динамического перехвата функций.
- Переменные
-
Доступные Настройки и Переменные Плагина
На данный момент плагин не имеет настраиваемых переменных или опций. Все функции и поведение плагина задаются в коде и не подлежат изменению через конфигурационные файлы.
- Команды
-
Для этого плагина команды не предусмотрены. Он работает автоматически и не требует пользовательского ввода команд в игре или через консоль. Все действия плагина выполняются на основе его кода и настроек при загрузке и завершении работы.
Доступные Команды Плагина
На данный момент плагин не имеет команд. Все функциональные возможности и поведение плагина управляются автоматически и не требуют пользовательского ввода команд.
- Установка
-
Руководство по Установке Плагина
1. Установите SourceMod
- Скачайте и установите SourceMod на ваш сервер CS
если он еще не установлен.
- Скачайте и установите SDKHooks и DHooks в соответствии с инструкциями на их страницах.
- Поместите файл плагина (hvhgg_netmsg_crash_fix.smx) в папку addons/sourcemod/plugins на вашем сервере.
- Поместите файл плагина (hvhgg_netmsg_crash_fix.sp) в папку addons/sourcemod/scriptings на вашем сервере.
4. Установите файл данных
- Создайте папку gamedata в addons/sourcemod/, если она еще не существует.
- Поместите файл данных (hvhgg_netmsg_crash_fix.txt) в папку addons/sourcemod/gamedata.
- Перезапустите ваш сервер CS
чтобы плагин и его зависимости начали работать.
- Скачайте и установите SourceMod на ваш сервер CS