Система классов
January 2024
You can help by adding links to this article from other relevant articles.
January 2024
Начало
Откройте SDK и запустите "Мастер создания мода" ("Create a Mod" wizard). Выберите пункт "Начать с шаблона" ("Start a Multiplayer mod from a template"). Не беспокойтесь на счет предупреждения о "продвинутых пользователях", так как Valve упростила процесс до невозможности. Убедитесь что вы установили флажок на "Включить классы", а ещё лучше "Включить команды".
Скрипты
На текущий момент настройки классов можно совершить при помощи простых текстовых файлов. Это файлы, которые находятся в папке "$moddir\scripts", под именем класса (например, playerclass_blue_class1.txt)
Пока это лишь ознакомление, поэтому некоторые вещи могут быть неясными, или не указанными.
Переменные (на стороне кода)
int m_iTeam; // 0 - не привязан (нет команды), 1 - наблюдатель, 2 - первая команда (BLUE), 3 - вторая команда (RED), и так далее
int m_iPrimaryWeapon; // Первичное оружие, которое определено в sdk_shareddefs.h (по-умолчанию это NONE, MP5, SHOTGUN, GRENADE, PISTOL, и CROWBAR)
int m_iSecondaryWeapon; // Вторичное оружие, может быть WEAPON_NONE
int m_iMeleeWeapon; // Рукопашное оружие (нож, кулак, молот, т.д.)
int m_iNumGrensType1; // Количество первичных гранат
int m_iGrenType1; // Тип первичных гранат
int m_iNumGrensType2; // Количество вторичных гранат
int m_iGrenType2; // Тип вторичных гранат
char m_szLimitCvar[64]; // CVar для лимита классов
float m_flRunSpeed; // Нормальная скорость бега, в юнитах/секунду. В SDK по-умолчанию 220, HL2 использует 190
float m_flSprintSpeed; // Скорость в спринте, в юнитах/секунду. Обычно это 150% от скорости бега. В SDK по-умолчанию 330, HL2 использует 327.5
float m_flProneSpeed; // Скорость передвижения в положении лежа, в юнитах/секунду. В SDK по-умолчанию 50 (в HL2 не используется)
int m_iArmor; // Броня. Поглощает 80% повреждений (настраивается в player.cpp)
char m_szClassImage[SDK_PLAYERCLASS_IMAGE_LENGTH]; // Изображение игрока
char m_szClassImageBG[SDK_PLAYERCLASS_IMAGE_LENGTH]; // Задний фон изображения (рамка, затемненная копия изображения)
Переменные (на стороне .txt)
// Обязательные настройки "printname" "#class_red_class1" // Имя класса, обычно строка с указанием на локализацию. Не используется в sdk_playerclass_info_parse.cpp, но используется в других местах .res файлов "playermodel" "models/player/red_player.mdl" // Модель класса "selectcmd" "cls_red_class1" // Консольная команда, служащая для установки класса игроку "team" "RED" // Команда класса. Базовый код принимает "BLUE" или "RED" "primaryweapon" "pistol" // Название первичного оружия "limitcvar" "mp_limit_red_class1" // Консольная переменная, следящая за максимальным количеством игроков с данным классом "classimage" "cls_red_class1_active" // Изображение в HUD "classimagebg" "cls_red_class1_active_bg" // Задний фон изображения HUD // Выборочные настройки "secondaryweapon" "none" // По-умолчанию ничего "meleeweapon" "crowbar" // По-умолчанию ничего "grenadetype" "grenade" // По-умолчанию ничего "numgrens" "1" // По-умолчанию 0 "grenadetype2" "grenade" // По-умолчанию ничего "numgrens2" "1" // По-умолчанию 0 "armor" "50" // По-умолчанию 0 "RunSpeed" "240" // По-умолчанию SDK_DEFAULT_PLAYER_RUNSPEED, равная 220 "SprintSpeed" "360" // По-умолчанию SDK_DEFAULT_PLAYER_SPRINTSPEED, равная 330 "ProneSpeed" "70" // По-умолчанию SDK_DEFAULT_PLAYER_PRONESPEED, равная 50
Как это выглядит вместе
void unused = "printname" int m_iTeam; = "team" int m_iPrimaryWeapon; = "primaryweapon" int m_iSecondaryWeapon; = "secondaryweapon" int m_iMeleeWeapon; = "meleeweapon" int m_iNumGrensType1; = "numgrens" int m_iGrenType1; = "grenadetype" int m_iNumGrensType2; = "numgrens2" int m_iGrenType2; = "grenadetype2" char m_szLimitCvar[64]; = "limitcvar" float m_flRunSpeed; = "RunSpeed" float m_flSprintSpeed; = "SprintSpeed" float m_flProneSpeed; = "ProneSpeed" int m_iArmor; = "armor" char m_szClassImage[SDK_PLAYERCLASS_IMAGE_LENGTH]; = "classimage" char m_szClassImageBG[SDK_PLAYERCLASS_IMAGE_LENGTH]; = "classimagebg"
Система классов читает .txt файлы в папке "scripts/" по названию "классигрока_<красный/синий>_класс<номер>.txt".
Пример:
PlayerClassDatafile
{
// Члены FilePLayerClassInfo_t
"printname" "#class_blue_class1"
"playermodel" "models/player/blue_player.mdl"
"selectcmd" "cls_blue_class1"
// Члены CSDKPlayerClassInfo
// Принадлежность класса к команде (для проверки)
"team" "BLUE"
// Оружие класса
"primaryweapon" "pistol"
"secondaryweapon" "none"
"meleeweapon" "crowbar"
"grenadetype" "grenade"
"numgrens" "1"
"limitcvar" "mp_limit_blue_class1"
"classimage" "cls_blue_class1_active"
"classimagebg" "cls_blue_class1_active_bg"
"armor" "50"
// Передвижение
"RunSpeed" "240"
"SprintSpeed" "360"
"ProneSpeed" "70"
}