Система классов
January 2024
Вы можете помочь,
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"
}