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

From Valve Developer Community
Jump to: navigation, search
English


To do: Объяснить как реализовать это в Half Life 2: Deathmatch


Начало

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

Bug: Начав мод с шаблона, скомпилировав 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"


To do: Возможность добавить специальную способность для конкретного класса (например, дать двойной прыжок)


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