Ru/Class System

== Начало ==
Откройте 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"
}
Category:Programming