Ru/Class System: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
mNo edit summary
m (Added "-")
Line 5: Line 5:




{{todo|Объяснить как реализовать это в Half Life 2: Deathmatch}}
{{todo|Объяснить как реализовать это в Half-Life 2: Deathmatch}}





Revision as of 18:05, 26 April 2021

Template:Otherlang2


Нужно сделать: Объяснить как реализовать это в Half-Life 2: Deathmatch


Начало

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

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


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


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