какие есть там нету половина функции которые реально нужны этом и большой минус модовТак есть аналоги на других движках: cs2fixes(metamod), zombiesharp(cs#), zombiemodsharp:alpha(modsharp)
Сборка успешно завершена.
Предупреждений: 0
Ошибок: 0
Прошло времени 00:00:00.76

Т.ё. CounterStrikeSharp фигня?ну конечно нашли куда переносить зомби мод... нагрузка на сервер итак колосальная для кс2, в отличии от ксс, где сервер на 771 будет неплохо крутится. вот приложу скринПосмотреть вложение 122893
Сообщения автоматически склеены:
Ну и я не говорю о тех плагинах, которые ещё сверху поставить надо, различные фиксы и customio
Хз, я на modsharp плагины переношу, т.к. все фиксы практически из коробки есть, но модулей пока перенесено совсем мало, даже админ панели, так таковой нетуТ.ё. CounterStrikeSharp фигня?
А что что лучше переносить?
ZombieReloaded (IModSharpModule)
├── Core Systems (Основные системы)
│ ├── ConfigManager - Управление конфигурацией
│ ├── TranslationManager - Локализация и переводы
│ ├── InfectionManager - Ядро системы инфекции
│ ├── PlayerClassManager - Управление классами игроков
│ ├── WeaponManager - Управление оружием
│ └── ModelManager - Управление моделями
│
├── Additional Modules (Дополнительные модули)
│ ├── KnockbackManager - Система отбрасывания
│ ├── RespawnManager - Система возрождения
│ ├── NapalmManager - Эффекты огня от гранат
│ ├── ZTeleManager - Система телепортации
│ ├── VisualEffectManager - Визуальные эффекты
│ ├── SoundEffectManager - Звуковые эффекты
│ ├── SpawnProtectManager - Защита при спавне
│ └── JumpBoostManager - Увеличение прыжка
│
└── Supporting Systems (Вспомогательные системы)
├── CommandManager - Управление командами
├── EventManager - Обработка игровых событий
└── API - Публичный API для других плагинов
<root>/configs/zr/
playerclasses.txt
weapons.txt
models.txt
downloads.txt
translations/
Load()
PrintToChat(client, key, ...)
Dictionary<SteamID, bool>
PlayerClassManager
VisualEffectManager
SoundEffectManager
IsClientInfected(client)
InfectClient(client, attacker?)
HumanizeClient(client)
SetImmunity(client, duration)
HasImmunity(client)
playerclasses.txt
PlayerClassConfigLoader
_classesByIdentifier
_classes
ClassAttributeApplier
Identifier
Name
Team
Health
Speed
ModelPath
AlphaInitial
OverlayPath
Fov
NightVision
pawn.MaxHealth = classData.HealthInitial
ModelManager.ApplyModel(client, modelPath)
IMovementService.SetSpeedModifier(speedMultiplier)
IBaseModelEntity.RenderMode = TransAlpha
RenderColor
ICameraService.FieldOfView
IPlayerController.DesiredFOV
LoadClasses()
GetClassData(identifier)
FindClass(identifierOrName)
SetClientClass(client, identifier)
GetClientClass(client)
GetDefaultClass(team)
models.txt
ModelConfigLoader
PrecacheResource()
_precachedModels
SetModel()
Path
Name
Access
Team
Skin
LoadModels()
PrecacheModels()
PrecacheModel(modelPath)
ApplyModel(client, modelPath, skinIndex)
GetRandomModelForTeam(team)
weapons.txt
Name
Slot
LoadWeapons()
GetWeaponData(name)
RemoveAllClientWeapons(client)
GiveDefaultZombieWeapons(client)
IClientManager.InstallCommandCallback()
ms_
.command
/command
!command
ECommandAction
_clientManager.InstallCommandCallback("zr_class", OnClassCommand);
zr_infect <target>
zr_human <target>
zr_respawn <target>
zr_ztele_force <target>
zr_config_reload
zr_config_reloadall
zr_class [name]
zr_menu
ztele
zr_menu
zr_class
OnClientHurt(victim, attacker, ...)
RespawnClient(client, condition)
TeleportClient(client, force)
IModSharp.DispatchParticleEffect()
Vector.DirectionToAngles()
CreateExplosion(origin, fireball, smoke, sparks)
DispatchParticleEffect()
CreateEnergySplash(origin, direction, explosive)
direction.DirectionToAngles()
CreateInfectionEffects(client)
RemoveRagdoll(client)
_modSharp.DispatchParticleEffect("particle_name", origin, angles, filter);
angles = direction.DirectionToAngles(); // Преобразование направления
IPlayerPawn.EmitSound()
PrecacheResource()
PlayMoan(client)
_modSharp.PrecacheResource(soundPath)
pawn.EmitSound(soundPath, volume)
StartMoaning(client)
StopMoaning(client)
PlayPain(client)
PlayDeath(client)
PlayScream(client)
_modSharp.PrecacheResource(soundPath); // Предзагрузка
var pawn = client.GetPlayerController()?.GetPawn();
pawn?.EmitSound(soundPath, volume); // Воспроизведение всем
pawn?.EmitSoundClient(soundPath, volume); // Воспроизведение конкретному клиенту
OnClientSpawn
InfectionManager
OnClientSpawn(client)
OnClientDeath(client)
OnPlayerJump
SetAbsVelocity()
OnPlayerJump(client)
IEventListener
player_spawn
SpawnProtectManager
RespawnManager
player_death
InfectionManager
RespawnManager
VisualEffectManager
SpawnProtectManager
player_hurt
KnockbackManager
NapalmManager
player_jump
JumpBoostManager
round_start
round_end
IZombieReloadedAPI
IsClientInfected(client)
IsClientHuman(client)
InfectClient(client, attacker?)
HumanizeClient(client)
HasZombieSpawned()
RespawnClient(client, condition)
TeleportClient(client, force)
IClientManager.InstallCommandCallback(command, handler);
IClientManager.RemoveCommandCallback(command, handler);
// Обработчик: ECommandAction OnCommand(IGameClient client, StringCommand command)
IModSharp.PrecacheResource(soundPath);
IPlayerPawn.EmitSound(soundPath, volume);
IPlayerPawn.EmitSoundClient(soundPath, volume);
ISoundManager.StartSoundEvent(sound, entity, volume, filter);
IModSharp.DispatchParticleEffect("particle_name", origin, angles, filter);
Vector.DirectionToAngles(); // Преобразование направления в углы
IModSharp.PrecacheResource(resourcePath); // Звуки, модели, частицы
Guid timerId = IModSharp.PushTimer(() => { }, interval, GameTimerFlags.Repeat);
IModSharp.StopTimer(timerId);
IGameClient.SayChatMessage(teamOnly, message);
IModSharp.PrintToChatAll(message);
IModSharp.PrintToChat(team, message);
IPlayerPawn? pawn = client.GetPlayerController()?.GetPawn();
pawn?.SetModel(modelPath);
pawn?.SetSkin(skinIndex);
pawn?.EmitSound(soundPath);
IBaseModelEntity.RenderMode = RenderMode.TransAlpha;
IBaseModelEntity.RenderColor = new Color32(r, g, b, alpha);
IMovementService.SetSpeedModifier(multiplier);
ICameraService.FieldOfView = fov;
IPlayerController.DesiredFOV = fov;
Sharp.Modules.ZombieReloaded/
├── src/
│ ├── ZombieReloaded.cs # Главный модуль
│ ├── Sharp.Modules.ZombieReloaded.csproj
│ │
│ ├── API/ # Публичный API
│ │ └── ZombieReloadedAPI.cs
│ │
│ ├── Commands/ # Система команд
│ │ └── CommandManager.cs
│ │
│ ├── Core/ # Основные системы
│ │ ├── ConfigManager.cs
│ │ ├── InfectionManager.cs # ЯДРО - система инфекции
│ │ ├── TranslationManager.cs
│ │ │
│ │ ├── PlayerClass/ # Система классов
│ │ │ ├── PlayerClassManager.cs
│ │ │ ├── PlayerClassData.cs
│ │ │ ├── PlayerClassConfigLoader.cs
│ │ │ └── ClassAttributeApplier.cs
│ │ │
│ │ ├── Weapon/ # Система оружия
│ │ │ ├── WeaponManager.cs
│ │ │ ├── WeaponData.cs
│ │ │ └── WeaponConfigLoader.cs
│ │ │
│ │ └── Model/ # Система моделей
│ │ ├── ModelManager.cs
│ │ ├── ModelData.cs
│ │ └── ModelConfigLoader.cs
│ │
│ ├── Events/ # Обработка событий
│ │ └── EventManager.cs
│ │
│ ├── Menus/ # Система меню (чаты)
│ │ └── MenuManager.cs
│ │
│ └── Modules/ # Дополнительные модули
│ ├── KnockbackManager.cs # Отбрасывание
│ ├── RespawnManager.cs # Возрождение
│ ├── NapalmManager.cs # Напалм
│ ├── ZTeleManager.cs # Телепортация
│ │
│ ├── JumpBoost/ # Увеличение прыжка
│ │ └── JumpBoostManager.cs
│ │
│ ├── SpawnProtect/ # Защита при спавне
│ │ └── SpawnProtectManager.cs
│ │
│ ├── SoundEffects/ # Звуковые эффекты
│ │ └── SoundEffectManager.cs
│ │
│ └── VisualEffects/ # Визуальные эффекты
│ └── VisualEffectManager.cs
│
├── build.bat # Скрипт сборки (Windows)
├── build.sh # Скрипт сборки (Linux/Mac)
└── BUILD.md # Инструкция по сборке
dotnet --version
cd ZombieReloaded/Sharp.Modules.ZombieReloaded
build.bat
cd ZombieReloaded/Sharp.Modules.ZombieReloaded
./build.sh
cd ZombieReloaded/Sharp.Modules.ZombieReloaded/src
dotnet build Sharp.Modules.ZombieReloaded.csproj --configuration Release
.build/Sharp.Modules/ZombieReloaded/Release/ZombieReloaded.dll
ZombieReloaded.dll
<game root>/game/csgo/addons/modsharp/modules/
<game root>/game/csgo/addons/modsharp/configs/zr/
playerclasses.txt
weapons.txt
models.txt
downloads.txt
<game root>/game/csgo/addons/modsharp/translations/zombiereloaded/
zr_menu
.zr_menu
zr_class
.zr_class
zr_class <имя_класса>
ztele
.ztele
ms_
ms_zr_class
ms_ztele
zr_infect <target>
zr_human <target>
zr_respawn <target>
zr_ztele_force <target>
zr_config_reload
zr_config_reloadall
// Создание всех менеджеров
_configManager = new ConfigManager(...);
_infectionManager = new InfectionManager(...);
// ...
// Загрузка конфигурации
_configManager.Load();
_translationManager.Load();
// Инициализация менеджеров с зависимостями
_playerClassManager.Init();
_playerClassManager.PostInit();
// Регистрация событий
_modSharp.InstallGameListener(this);
_clientManager.InstallClientListener(this);
// Регистрация команд
_commandManager.RegisterCommands();
// Удаление слушателей
_modSharp.RemoveGameListener(this);
_clientManager.RemoveClientListener(this);
// Отмена регистрации команд
_commandManager.UnregisterCommands();
// Завершение всех менеджеров
_infectionManager?.Shutdown();
// ...
IModSharpModule
IGameListener
IClientListener
IModSharp
IClientManager
IEventManager
ISharedSystem
IModSharp modSharp = sharedSystem.GetModSharp();
IClientManager clientManager = sharedSystem.GetClientManager();
IEventManager eventManager = sharedSystem.GetEventManager();
ISoundManager soundManager = sharedSystem.GetSoundManager();
ILoggerFactory loggerFactory = sharedSystem.GetLoggerFactory();
IGameListener
IClientListener
SteamID
Dictionary<SteamID, bool>
Dictionary<SteamID, string>
Dictionary<SteamID, Guid>
ILogger<T>
LogInformation
LogWarning
LogError
LogDebug
// Проверка статуса зомби
bool isZombie = _infectionManager.IsClientInfected(client);
// Получение класса
string classId = _playerClassManager.GetClientClass(client);
var api = sharedSystem.GetSharpModuleManager()
.GetSharpModuleInterface<IZombieReloadedAPI>("ZombieReloaded");
if (api != null)
{
api.InfectClient(client, attacker);
}
bool isZombie = api.IsClientInfected(client);
if (isZombie)
{
// Логика для зомби
}
// Предзагрузка
_modSharp.PrecacheResource("sounds/zr/infection.mp3");
// Воспроизведение от игрока
var pawn = client.GetPlayerController()?.GetPawn();
pawn?.EmitSound("sounds/zr/infection.mp3", 1.0f);
var origin = pawn.GetAbsOrigin();
var angles = new Vector(0, 0, 0);
_modSharp.DispatchParticleEffect("explosion_fireball", origin, angles);
============================================
Building Zombie Reloaded for ModSharp
============================================
Checking .NET SDK...
10.0.100
Step 1: Restoring dependencies (including ModSharp.Sharp.Shared from NuGet)...
Восстановление завершено (0,3 с)
Сборка успешно выполнено через 0,6 с
Step 2: Building Zombie Reloaded (Release configuration)...
Восстановление завершено (0,3 с)
Sharp.Modules.ZombieReloaded net10.0 успешно выполнено (0,5 с) → ..\..\CS2_ZM_modsharp\.build\Sharp.Modules\ZombieReloaded\Release\net10.0\ZombieReloaded.dll
Сборка успешно выполнено через 1,2 с
============================================
Build successful!
============================================
DLL location: ..\..\..\.build\Sharp.Modules\ZombieReloaded\Release\net10.0\ZombieReloaded.dll
Copy this DLL to your ModSharp modules folder:
<game root>\game\csgo\addons\modsharp\modules\
не фига себе только остается узнать работает ли сам мод на кс 2? или много фиксов сделать нужно@DarkerZ, Вроде как компилируется без ошибок.
Zombie Reloaded для ModSharp (CS2)
Полный порт популярного SourceMod плагина Zombie Reloaded для системы ModSharp на Counter-Strike 2.
Описание
Zombie Reloaded - это игровой мод для CS2, который превращает классический геймплей в режим выживания против зомби. Игроки делятся на две команды: зомби (заражают людей) и люди (выживают от зомби).
Оригинальный плагин: Greyscale, Richard Helgeby
Портирование на ModSharp: Текущая реализация
Архитектура
Проект построен на модульной архитектуре с четким разделением ответственности:
C-подобный:ZombieReloaded (IModSharpModule) ├── Core Systems (Основные системы) │ ├── ConfigManager - Управление конфигурацией │ ├── TranslationManager - Локализация и переводы │ ├── InfectionManager - Ядро системы инфекции │ ├── PlayerClassManager - Управление классами игроков │ ├── WeaponManager - Управление оружием │ └── ModelManager - Управление моделями │ ├── Additional Modules (Дополнительные модули) │ ├── KnockbackManager - Система отбрасывания │ ├── RespawnManager - Система возрождения │ ├── NapalmManager - Эффекты огня от гранат │ ├── ZTeleManager - Система телепортации │ ├── VisualEffectManager - Визуальные эффекты │ ├── SoundEffectManager - Звуковые эффекты │ ├── SpawnProtectManager - Защита при спавне │ └── JumpBoostManager - Увеличение прыжка │ └── Supporting Systems (Вспомогательные системы) ├── CommandManager - Управление командами ├── EventManager - Обработка игровых событий └── API - Публичный API для других плагинов
Принцип работы
- Инициализация (Init/PostInit): Все менеджеры создаются и инициализируются в правильном порядке
- Загрузка конфигурации: Классы, оружие, модели загружаются из файлов конфигурации
- Регистрация событий: Установка слушателей для игровых и клиентских событий
- Работа в реальном времени: Обработка событий, применение атрибутов, звуки и эффекты
Интегрированные системы
1. Система конфигурации (ConfigManager)
Принцип работы:
- Управляет загрузкой всех конфигурационных файлов
- Создает директории конфигурации при первом запуске
- Путь к конфигурации:
C-подобный:<root>/configs/zr/
Файлы конфигурации:
- классы игроков (зомби/люди)C-подобный:playerclasses.txt - настройки оружия и рестриктыC-подобный:weapons.txt - модели для игроковC-подобный:models.txt - файлы для загрузки клиентамC-подобный:downloads.txt
2. Система переводов (TranslationManager)
Принцип работы:
- Загружает файлы переводов из
C-подобный:translations/- Поддерживает множественные языки
- Форматирует сообщения с параметрами
Методы:
- загрузка переводовC-подобный:Load() - отправка переведенного сообщения в чатC-подобный:PrintToChat(client, key, ...)
3. Система инфекции (InfectionManager) - ЯДРО
Принцип работы:
- Отслеживает статус зомби/человека для каждого игрока через
C-подобный:Dictionary<SteamID, bool>- Управляет иммунитетом от заражения
- Интегрирован с другими системами для полной трансформации игрока
Процесс заражения (InfectClient):
- Проверка иммунитета и текущего статуса
- Установка статуса зомби
- Применение класса зомби через
C-подобный:PlayerClassManager- Создание визуальных эффектов (взрывы, энергия) через
C-подобный:VisualEffectManager- Воспроизведение звуков заражения через
C-подобный:SoundEffectManager- Удаление всего оружия
- Переключение команды на террористов (зомби)
Процесс гуманизации (HumanizeClient):
- Сброс статуса зомби
- Применение класса человека
- Остановка звуков зомби (стоны)
- Выдача оружия человеку
Методы:
- проверка статусаC-подобный:IsClientInfected(client) - заразить игрокаC-подобный:InfectClient(client, attacker?) - сделать человекомC-подобный:HumanizeClient(client) - установить иммунитетC-подобный:SetImmunity(client, duration) - проверить иммунитетC-подобный:HasImmunity(client)
4. Система классов игроков (PlayerClassManager)
Принцип работы:
- Загружает классы из
черезC-подобный:playerclasses.txtC-подобный:PlayerClassConfigLoader- Хранит классы в словарях:
иC-подобный:_classesByIdentifierC-подобный:_classes- Разделяет классы на зомби и людей
- Применяет все атрибуты класса через
C-подобный:ClassAttributeApplier
Структура класса (ClassAttributes):
- уникальный идентификаторC-подобный:Identifier - отображаемое имяC-подобный:Name - команда (Zombies/Humans)C-подобный:Team - здоровьеC-подобный:Health - модификатор скоростиC-подобный:Speed - путь к моделиC-подобный:ModelPath - начальная прозрачность (0-255)C-подобный:AlphaInitial - путь к оверлеюC-подобный:OverlayPath - поле зренияC-подобный:Fov - ночное видениеC-подобный:NightVision- И другие атрибуты
Применение атрибутов (ClassAttributeApplier):
- Здоровье:
C-подобный:pawn.MaxHealth = classData.HealthInitial- Модель:
C-подобный:ModelManager.ApplyModel(client, modelPath)- Скорость:
C-подобный:IMovementService.SetSpeedModifier(speedMultiplier)- Прозрачность:
,C-подобный:IBaseModelEntity.RenderMode = TransAlphaс альфа-каналомC-подобный:RenderColor- FOV:
иC-подобный:ICameraService.FieldOfViewC-подобный:IPlayerController.DesiredFOV- Ночное видение: Заглушка (требует API ModSharp)
Методы:
- загрузка классов из конфигаC-подобный:LoadClasses() - получить данные классаC-подобный:GetClassData(identifier) - найти класс по имени или идентификатору (регистронезависимо)C-подобный:FindClass(identifierOrName) - установить класс игрокуC-подобный:SetClientClass(client, identifier) - получить текущий класс игрокаC-подобный:GetClientClass(client) - получить класс по умолчанию для командыC-подобный:GetDefaultClass(team)
5. Система моделей (ModelManager)
Принцип работы:
- Загружает модели из
черезC-подобный:models.txtC-подобный:ModelConfigLoader- Предзагружает модели через
перед использованиемC-подобный:PrecacheResource()- Отслеживает предзагруженные модели в
C-подобный:_precachedModels- Применяет модели к игрокам через
C-подобный:SetModel()
Структура модели (ModelAttributes):
- путь к моделиC-подобный:Path - имя моделиC-подобный:Name - доступность (Public/Admin)C-подобный:Access - команда (Zombies/Humans/Both)C-подобный:Team - индекс скинаC-подобный:Skin
Методы:
- загрузка из конфигаC-подобный:LoadModels() - предзагрузка всех моделейC-подобный:PrecacheModels() - предзагрузка одной моделиC-подобный:PrecacheModel(modelPath) - применить модельC-подобный:ApplyModel(client, modelPath, skinIndex) - получить случайную модель для командыC-подобный:GetRandomModelForTeam(team)
6. Система оружия (WeaponManager)
Принцип работы:
- Загружает данные оружия из
C-подобный:weapons.txt- Управляет рестриктами на оружие
- Контролирует выдачу оружия зомби и людям
Структура оружия (WeaponAttributes):
- имя оружияC-подобный:Name - слот оружия (Primary/Secondary/Knife/Grenade)C-подобный:Slot- Рестрикты и ограничения
Методы:
- загрузка из конфигаC-подобный:LoadWeapons() - получить данные оружияC-подобный:GetWeaponData(name) - удалить все оружиеC-подобный:RemoveAllClientWeapons(client) - выдать оружие зомби по умолчаниюC-подобный:GiveDefaultZombieWeapons(client)
7. Система команд (CommandManager)
Принцип работы:
- Использует ModSharp API:
C-подобный:IClientManager.InstallCommandCallback()- Команды автоматически получают префикс
в консолиC-подобный:ms_- Работают триггеры в чате:
,C-подобный:.command,C-подобный:/commandC-подобный:!command- Обработчики возвращают
(Stopped/Handled/Skipped)C-подобный:ECommandAction
Регистрация:
C#:_clientManager.InstallCommandCallback("zr_class", OnClassCommand);
Административные команды:
- заразить игрокаC-подобный:zr_infect <target> - сделать человекомC-подобный:zr_human <target> - возродить игрокаC-подобный:zr_respawn <target> - принудительно телепортироватьC-подобный:zr_ztele_force <target> - перезагрузить конфигC-подобный:zr_config_reload - перезагрузить все конфигиC-подобный:zr_config_reloadall
Игровые команды:
- выбрать класс (без аргументов показывает меню)C-подобный:zr_class [name] - показать главное менюC-подобный:zr_menu - телепортироваться на спавнC-подобный:ztele
Система меню:
Меню реализованы через чат-сообщения (ModSharp пока не поддерживает UI меню):
- Главное меню:
- показывает доступные опцииC-подобный:zr_menu- Меню классов:
- показывает доступные классы зомби и людей, помечает текущий классC-подобный:zr_class
8. Система отбрасывания (KnockbackManager)
Принцип работы:
- Вычисляет вектор отбрасывания на основе позиции атакующего и жертвы
- Применяет силу отбрасывания через модификацию скорости
- Учитывает класс зомби и его атрибуты отбрасывания
Методы:
- обработка урона и применение отбрасыванияC-подобный:OnClientHurt(victim, attacker, ...)
9. Система возрождения (RespawnManager)
Принцип работы:
- Управляет возрождением игроков после смерти
- Отслеживает таймеры возрождения для каждого игрока
- Применяет классы и эффекты при возрождении
Методы:
- возродить игрокаC-подобный:RespawnClient(client, condition)
10. Система напалма (NapalmManager)
Принцип работы:
- Отслеживает гранаты, брошенные игроками
- Создает зоны огня, которые наносят урон
- Управляет таймерами горения для каждого игрока
11. Система телепортации (ZTeleManager)
Принцип работы:
- Находит точки спавна на карте
- Телепортирует игрока на спавн с эффектами
- Управляет задержкой и ограничениями на телепорт
Методы:
- телепортировать игрокаC-подобный:TeleportClient(client, force)
12. Визуальные эффекты (VisualEffectManager)
Принцип работы:
- Использует ModSharp API:
C-подобный:IModSharp.DispatchParticleEffect()- Создает взрывы, энергетические всплески, частицы
- Использует
для преобразования направленияC-подобный:Vector.DirectionToAngles()
Методы:
- создать взрывC-подобный:CreateExplosion(origin, fireball, smoke, sparks)- Использует
для создания частиц взрываC-подобный:DispatchParticleEffect() - энергетический всплескC-подобный:CreateEnergySplash(origin, direction, explosive)- Преобразует направление в углы через
C-подобный:direction.DirectionToAngles() - эффекты при зараженииC-подобный:CreateInfectionEffects(client) - удаление трупа (ragdoll)C-подобный:RemoveRagdoll(client)
Используемые API:
C#:_modSharp.DispatchParticleEffect("particle_name", origin, angles, filter); angles = direction.DirectionToAngles(); // Преобразование направления
13. Звуковые эффекты (SoundEffectManager)
Принцип работы:
- Использует ModSharp API:
для воспроизведения звуковC-подобный:IPlayerPawn.EmitSound()- Предзагружает звуки через
перед использованиемC-подобный:PrecacheResource()- Управляет таймерами для периодических звуков (стоны зомби)
Типы звуков:
- Moan (стоны): Периодические стоны зомби с настраиваемым интервалом
- Pain (боль): Звуки при получении урона (с вероятностью)
- Death (смерть): Звуки при смерти зомби
- Scream (крик): Крик при заражении
- Ambient (окружающие): Фоновые звуки
Методы:
- воспроизвести стонC-подобный:PlayMoan(client)- Предзагрузка:
C-подобный:_modSharp.PrecacheResource(soundPath)- Воспроизведение:
C-подобный:pawn.EmitSound(soundPath, volume) - начать периодические стоны (таймер)C-подобный:StartMoaning(client) - остановить стоныC-подобный:StopMoaning(client) - звук болиC-подобный:PlayPain(client) - звук смертиC-подобный:PlayDeath(client) - крик зараженияC-подобный:PlayScream(client)
Используемые API:
C#:_modSharp.PrecacheResource(soundPath); // Предзагрузка var pawn = client.GetPlayerController()?.GetPawn(); pawn?.EmitSound(soundPath, volume); // Воспроизведение всем pawn?.EmitSoundClient(soundPath, volume); // Воспроизведение конкретному клиенту
14. Защита при спавне (SpawnProtectManager)
Принцип работы:
- Защищает игрока от урона сразу после спавна
- Визуально показывает защиту через измененную прозрачность и скорость
- Управляет таймером защиты для каждого игрока
Процесс:
- При спавне (
): запускается защитаC-подобный:OnClientSpawn- Устанавливается иммунитет в
C-подобный:InfectionManager- Применяются визуальные эффекты (прозрачность, скорость)
- Таймер обратного отсчета в чате
- При истечении: снятие защиты
Методы:
- обработка спавнаC-подобный:OnClientSpawn(client) - обработка смерти (снятие защиты)C-подобный:OnClientDeath(client)
15. Увеличение прыжка (JumpBoostManager)
Принцип работы:
- Модифицирует скорость прыжка на основе атрибутов класса
- Отслеживает события прыжка через
C-подобный:OnPlayerJump- Включает защиту от bunnyhop (быстрые прыжки подряд)
Процесс:
- Отслеживание события прыжка
- Получение атрибутов класса (множитель прыжка)
- Модификация вертикальной скорости через
C-подобный:SetAbsVelocity()- Защита от bunnyhop через отслеживание времени между прыжками
Методы:
- обработка прыжкаC-подобный:OnPlayerJump(client)
16. Обработка событий (EventManager)
Принцип работы:
- Централизованная обработка всех игровых событий
- Переадресация событий соответствующим менеджерам
- Реализует
для получения событийC-подобный:IEventListener
Обрабатываемые события:
→C-подобный:player_spawn,C-подобный:SpawnProtectManagerC-подобный:RespawnManager →C-подобный:player_death,C-подобный:InfectionManager,C-подобный:RespawnManager,C-подобный:VisualEffectManagerC-подобный:SpawnProtectManager →C-подобный:player_hurt,C-подобный:KnockbackManagerC-подобный:NapalmManager →C-подобный:player_jumpC-подобный:JumpBoostManager → Перезапуск системC-подобный:round_start → Очистка состоянияC-подобный:round_end
17. Публичный API (ZombieReloadedAPI)
Принцип работы:
- Предоставляет публичный интерфейс для других плагинов
- Реализует
C-подобный:IZombieReloadedAPI- Делегирует вызовы соответствующим менеджерам
Методы API:
- проверка статуса зомбиC-подобный:IsClientInfected(client) - проверка статуса человекаC-подобный:IsClientHuman(client) - заразитьC-подобный:InfectClient(client, attacker?) - гуманизироватьC-подобный:HumanizeClient(client) - проверка появления зомбиC-подобный:HasZombieSpawned() - возродитьC-подобный:RespawnClient(client, condition) - телепортироватьC-подобный:TeleportClient(client, force)
Используемые API ModSharp
Команды
C#:IClientManager.InstallCommandCallback(command, handler); IClientManager.RemoveCommandCallback(command, handler); // Обработчик: ECommandAction OnCommand(IGameClient client, StringCommand command)
Звуки
C#:IModSharp.PrecacheResource(soundPath); IPlayerPawn.EmitSound(soundPath, volume); IPlayerPawn.EmitSoundClient(soundPath, volume); ISoundManager.StartSoundEvent(sound, entity, volume, filter);
Визуальные эффекты
C#:IModSharp.DispatchParticleEffect("particle_name", origin, angles, filter); Vector.DirectionToAngles(); // Преобразование направления в углы
Предзагрузка
C#:IModSharp.PrecacheResource(resourcePath); // Звуки, модели, частицы
Таймеры
C#:Guid timerId = IModSharp.PushTimer(() => { }, interval, GameTimerFlags.Repeat); IModSharp.StopTimer(timerId);
Чат
C#:IGameClient.SayChatMessage(teamOnly, message); IModSharp.PrintToChatAll(message); IModSharp.PrintToChat(team, message);
Игроки
C#:IPlayerPawn? pawn = client.GetPlayerController()?.GetPawn(); pawn?.SetModel(modelPath); pawn?.SetSkin(skinIndex); pawn?.EmitSound(soundPath);
Атрибуты игрока
C#:IBaseModelEntity.RenderMode = RenderMode.TransAlpha; IBaseModelEntity.RenderColor = new Color32(r, g, b, alpha); IMovementService.SetSpeedModifier(multiplier); ICameraService.FieldOfView = fov; IPlayerController.DesiredFOV = fov;
Структура проекта
C-подобный:Sharp.Modules.ZombieReloaded/ ├── src/ │ ├── ZombieReloaded.cs # Главный модуль │ ├── Sharp.Modules.ZombieReloaded.csproj │ │ │ ├── API/ # Публичный API │ │ └── ZombieReloadedAPI.cs │ │ │ ├── Commands/ # Система команд │ │ └── CommandManager.cs │ │ │ ├── Core/ # Основные системы │ │ ├── ConfigManager.cs │ │ ├── InfectionManager.cs # ЯДРО - система инфекции │ │ ├── TranslationManager.cs │ │ │ │ │ ├── PlayerClass/ # Система классов │ │ │ ├── PlayerClassManager.cs │ │ │ ├── PlayerClassData.cs │ │ │ ├── PlayerClassConfigLoader.cs │ │ │ └── ClassAttributeApplier.cs │ │ │ │ │ ├── Weapon/ # Система оружия │ │ │ ├── WeaponManager.cs │ │ │ ├── WeaponData.cs │ │ │ └── WeaponConfigLoader.cs │ │ │ │ │ └── Model/ # Система моделей │ │ ├── ModelManager.cs │ │ ├── ModelData.cs │ │ └── ModelConfigLoader.cs │ │ │ ├── Events/ # Обработка событий │ │ └── EventManager.cs │ │ │ ├── Menus/ # Система меню (чаты) │ │ └── MenuManager.cs │ │ │ └── Modules/ # Дополнительные модули │ ├── KnockbackManager.cs # Отбрасывание │ ├── RespawnManager.cs # Возрождение │ ├── NapalmManager.cs # Напалм │ ├── ZTeleManager.cs # Телепортация │ │ │ ├── JumpBoost/ # Увеличение прыжка │ │ └── JumpBoostManager.cs │ │ │ ├── SpawnProtect/ # Защита при спавне │ │ └── SpawnProtectManager.cs │ │ │ ├── SoundEffects/ # Звуковые эффекты │ │ └── SoundEffectManager.cs │ │ │ └── VisualEffects/ # Визуальные эффекты │ └── VisualEffectManager.cs │ ├── build.bat # Скрипт сборки (Windows) ├── build.sh # Скрипт сборки (Linux/Mac) └── BUILD.md # Инструкция по сборке
Сборка проекта
Требования
- .NET SDK 10.0 или выше
- Скачать: Скачать .NET 10.0 (Linux, macOS, и Windows) | .NET
- Проверка:
C-подобный:dotnet --version
Быстрая сборка
Windows
Код:cd ZombieReloaded/Sharp.Modules.ZombieReloaded build.bat
Linux/Mac
Bash:cd ZombieReloaded/Sharp.Modules.ZombieReloaded ./build.sh
Ручная сборка
Bash:cd ZombieReloaded/Sharp.Modules.ZombieReloaded/src dotnet build Sharp.Modules.ZombieReloaded.csproj --configuration Release
Готовый DLL будет находиться в:
C-подобный:.build/Sharp.Modules/ZombieReloaded/Release/ZombieReloaded.dll
Установка
- Скопируйте
в папку модулей ModSharp:C-подобный:ZombieReloaded.dll
C-подобный:<game root>/game/csgo/addons/modsharp/modules/- Скопируйте конфигурационные файлы:
C-подобный:<game root>/game/csgo/addons/modsharp/configs/zr/
C-подобный:playerclasses.txt C-подобный:weapons.txt C-подобный:models.txt C-подобный:downloads.txt- Скопируйте переводы:
C-подобный:<game root>/game/csgo/addons/modsharp/translations/zombiereloaded/- Перезапустите сервер или выполните hot reload модуля
Использование
Команды для игроков
илиC-подобный:zr_menu- главное менюC-подобный:.zr_menu илиC-подобный:zr_class- меню выбора классовC-подобный:.zr_class - выбрать класс напрямуюC-подобный:zr_class <имя_класса> илиC-подобный:ztele- телепортироваться на спавнC-подобный:.ztele
В консоли команды работают с префиксом:C-подобный:ms_
C-подобный:ms_zr_class C-подобный:ms_ztele
Команды для администраторов
- заразить игрокаC-подобный:zr_infect <target> - сделать человекомC-подобный:zr_human <target> - возродить игрокаC-подобный:zr_respawn <target> - принудительно телепортироватьC-подобный:zr_ztele_force <target> - перезагрузить конфигC-подобный:zr_config_reload - перезагрузить все конфигиC-подобный:zr_config_reloadall
Конфигурация
playerclasses.txt
Определяет классы игроков (зомби и люди) с их атрибутами:
- Здоровье
- Скорость
- Модель
- Прозрачность
- FOV
- Ночное видение
- Оверлеи
weapons.txt
Настройки оружия:
- Рестрикты для зомби/людей
- Ограничения по слотам
- Настройки урона
models.txt
Модели игроков:
- Пути к моделям
- Доступность (Public/Admin)
- Команды (Zombies/Humans/Both)
- Скины
Жизненный цикл модуля
1. Инициализация (Init)
C#:// Создание всех менеджеров _configManager = new ConfigManager(...); _infectionManager = new InfectionManager(...); // ...
2. Постинициализация (PostInit)
C#:// Загрузка конфигурации _configManager.Load(); _translationManager.Load(); // Инициализация менеджеров с зависимостями _playerClassManager.Init(); _playerClassManager.PostInit(); // Регистрация событий _modSharp.InstallGameListener(this); _clientManager.InstallClientListener(this); // Регистрация команд _commandManager.RegisterCommands();
3. Работа
- Обработка игровых событий через слушателей
- Применение атрибутов классов
- Воспроизведение звуков и эффектов
- Управление таймерами
4. Завершение (Shutdown)
C#:// Удаление слушателей _modSharp.RemoveGameListener(this); _clientManager.RemoveClientListener(this); // Отмена регистрации команд _commandManager.UnregisterCommands(); // Завершение всех менеджеров _infectionManager?.Shutdown(); // ...
Интеграция с ModSharp
Используемые интерфейсы
- главный интерфейс модуляC-подобный:IModSharpModule - слушатель игровых событийC-подобный:IGameListener - слушатель клиентских событийC-подобный:IClientListener - основной API ModSharpC-подобный:IModSharp - управление клиентамиC-подобный:IClientManager - управление событиямиC-подобный:IEventManager - общая система ModSharpC-подобный:ISharedSystem
Получение сервисов
C#:IModSharp modSharp = sharedSystem.GetModSharp(); IClientManager clientManager = sharedSystem.GetClientManager(); IEventManager eventManager = sharedSystem.GetEventManager(); ISoundManager soundManager = sharedSystem.GetSoundManager(); ILoggerFactory loggerFactory = sharedSystem.GetLoggerFactory();
Основные принципы работы
1. Модульность
Каждая система изолирована и имеет четко определенную ответственность. Менеджеры общаются через зависимости и события.
2. Зависимости
Менеджеры инициализируются в правильном порядке:
- Базовые (Config, Translation)
- Основные (Infection, Weapon, PlayerClass, Model)
- Дополнительные (Knockback, Respawn, Napalm, ZTele)
- Эффекты (Visual, Sound)
- Защитные (SpawnProtect, JumpBoost)
- Системы (Command, Event, API)
3. События
Централизованная обработка черезиC-подобный:IGameListener:C-подобный:IClientListener
- Игровые события (round_start, player_death, player_spawn)
- Клиентские события (OnClientPutInServer, OnClientDisconnected)
4. Состояние
Каждый менеджер хранит свое состояние в словарях по:C-подобный:SteamID
- статусы зомбиC-подобный:Dictionary<SteamID, bool> - выбранные классыC-подобный:Dictionary<SteamID, string> - таймерыC-подобный:Dictionary<SteamID, Guid>
Отладка
Логирование
Все менеджеры используютдля логирования:C-подобный:ILogger<T>
- информационные сообщенияC-подобный:LogInformation - предупрежденияC-подобный:LogWarning - ошибкиC-подобный:LogError - отладочная информацияC-подобный:LogDebug
Проверка состояния
C#:// Проверка статуса зомби bool isZombie = _infectionManager.IsClientInfected(client); // Получение класса string classId = _playerClassManager.GetClientClass(client);
Дополнительная информация
- ModSharp Документация: Изучайте документацию для примеров
- Примеры кода: Смотрите примеры использования API
- API Reference: Изучайте интерфейсы ModSharp
Примеры использования API
Заражение игрока
C#:var api = sharedSystem.GetSharpModuleManager() .GetSharpModuleInterface<IZombieReloadedAPI>("ZombieReloaded"); if (api != null) { api.InfectClient(client, attacker); }
Проверка статуса
C#:bool isZombie = api.IsClientInfected(client); if (isZombie) { // Логика для зомби }
Воспроизведение звука
C#:// Предзагрузка _modSharp.PrecacheResource("sounds/zr/infection.mp3"); // Воспроизведение от игрока var pawn = client.GetPlayerController()?.GetPawn(); pawn?.EmitSound("sounds/zr/infection.mp3", 1.0f);
Создание эффекта
C#:var origin = pawn.GetAbsOrigin(); var angles = new Vector(0, 0, 0); _modSharp.DispatchParticleEffect("explosion_fireball", origin, angles);
Текущие ограничения и TODO
Реализовано
Базовая архитектура модуля
Система конфигурации
Система переводов
Ядро инфекции
Система классов игроков (все атрибуты)
Система моделей
Система оружия (загрузка)
Система команд (с меню)
Визуальные эффекты (частицы)
Звуковые эффекты (EmitSound)
Защита при спавне
Увеличение прыжка
В разработке
Полное применение рестриктов оружия
Смена команд при заражении
Полная реализация ragdoll removal
Требует API ModSharp
Ночное видение
Оверлеи
UI меню (сейчас используются чат-меню)
Лицензия
Оригинальный плагин: см. лицензию SourceMod плагина
Портирование: см. лицензию ModSharp
[HEADING=r]
Версия: 1.0.0
Для CS2 (ModSharp)
Статус: В активной разработке
C-подобный:============================================ Building Zombie Reloaded for ModSharp ============================================ Checking .NET SDK... 10.0.100 Step 1: Restoring dependencies (including ModSharp.Sharp.Shared from NuGet)... Восстановление завершено (0,3 с) Сборка успешно выполнено через 0,6 с Step 2: Building Zombie Reloaded (Release configuration)... Восстановление завершено (0,3 с) Sharp.Modules.ZombieReloaded net10.0 успешно выполнено (0,5 с) → ..\..\CS2_ZM_modsharp\.build\Sharp.Modules\ZombieReloaded\Release\net10.0\ZombieReloaded.dll Сборка успешно выполнено через 1,2 с ============================================ Build successful! ============================================ DLL location: ..\..\..\.build\Sharp.Modules\ZombieReloaded\Release\net10.0\ZombieReloaded.dll Copy this DLL to your ModSharp modules folder: <game root>\game\csgo\addons\modsharp\modules\
Вот тут | CS2_ZM_modsharp\ZombieReloaded\Sharp.Modules.ZombieReloaded | вы найдёте файлы для быстрой компиляции.
build.bat
- Удален шаг сборки Sharp.Shared из папки modsharp-public-master
- Оставлены только восстановление зависимостей из NuGet и сборка проекта
- Добавлено сообщение о необходимости интернет-соединения для загрузки пакетов
build.sh
- Аналогично упрощен для Linux/macOS
- Удалена зависимость от локальной сборки
Преимущества
- Использует официальный NuGet-пакет ModSharp.Sharp.Shared
- Автоматически получает последнюю версию из NuGet
- Упрощен процесс сборки
Требования
Теперь проект можно собирать, просто запустив build.bat или build.sh — зависимости будут загружены автоматически из NuGet.
- Интернет-соединение для загрузки пакетов из NuGet при первой сборке
- .NET SDK 10.0 или выше
И скинуть сюда логи ошибок если они есть.остается узнать работает ли сам мод на кс 2
надо тестовый сервер шас взять и проверить если будут ошибки напишуИ скинуть сюда логи ошибок если они есть.