Система классов

From Valve Developer Community
Jump to: navigation, search
Wikipedia - Letter.png
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)
Underlinked - Logo.png
This article needs more links to other articles to help integrate it into the encyclopedia. Please help improve this article by adding links that are relevant to the context within the existing text.
January 2024


English (en)русский (ru)
... Icon-Important.png
Blank image.pngTodo: Объяснить как реализовать это в Half-Life 2: Deathmatch

Начало

Откройте SDK и запустите "Мастер создания мода" ("Create a Mod" wizard). Выберите пункт "Начать с шаблона" ("Start a Multiplayer mod from a template"). Не беспокойтесь на счет предупреждения о "продвинутых пользователях", так как Valve упростила процесс до невозможности. Убедитесь что вы установили флажок на "Включить классы", а ещё лучше "Включить команды".

Icon-Bug.pngBug:Начав мод с шаблона, скомпилировав dll файлы и поиграв, мод виснет когда вы пытаетесь выйти. Фикс можно найти на странице Исправление шаблона Source 2007.

Скрипты

На текущий момент настройки классов можно совершить при помощи простых текстовых файлов. Это файлы, которые находятся в папке "$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"
Blank image.pngTodo: Возможность добавить специальную способность для конкретного класса (например, дать двойной прыжок)

Система классов читает .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"
}