Портирования оружия CSS в HL2

From Valve Developer Community
Jump to: navigation, search
English

Секция 1 - Редактирование модели

РЕДАКТИРОВАНИЕ: ПРОПУЩЕН ЭТОТ РАЗДЕЛ (SDK 2013 будет работать с любой существующей модели CSS без редактирования модели, просто требуется добавить пару строк кода, чтобы удалить одну или две ошибки)

Секция 2 - Точная настройка модели

После того как вы имеете v_model.mdl и w_model.mdl вам надо будет установить и настроить модели на оружие с помощью скрипта файла оружия. Разместите новое оружие, например weapon_357.txt внутри папки 'scripts' (C:\Program Files\Steam\SteamApps\sourcemods\MODNAME\scripts).

Теперь, чтобы исправить проблему отображение оружия только на левой стороне экрана внутри скрипта файла оружия, добавьте эти две строки:

"BuiltRightHanded" "0" 
"AllowFlipping" "1"  

Это укажет какое значение принять консольной переменной cl_righthand, которую мы сейчас и добавим; откройте 'c_baseviewmodel.cpp' и найдите 25 строку(38 в 2013), которая выглядит так:

#ifdef CSTRIKE_DLL 
	ConVar cl_righthand( "cl_righthand", "1", FCVAR_ARCHIVE, "Use right-handed view models." ); 
#endif

И поставьте комментарий на верхней и нижней строки:

 // #ifdef CSTRIKE_DLL 
 	ConVar cl_righthand( "cl_righthand", "1", FCVAR_ARCHIVE, "Use right-handed view models." ); 
 // #endif

Далее перейдите к 173 строке и поставьте комментарий на эти строки следующим образом:

 // #ifdef CSTRIKE_DLL
 	// If cl_righthand is set, then we want them all right-handed.
 	CBaseCombatWeapon *pWeapon = m_hWeapon.Get();
 	if ( pWeapon )
 	{
 		const FileWeaponInfo_t *pInfo = &pWeapon->GetWpnData();
 		return pInfo->m_bAllowFlipping && pInfo->m_bBuiltRightHanded != cl_righthand.GetBool();
 	}
 // #endif

Это создаст консольную переменную, которая будет указывать на какой стороне экрана будет отображаться оружие. Если вы хотите, чтобы оружие отображалось на левой стороне экрана, то введите в консоль cl_righthand 0. Теперь можно сохранить и скомпилировать клиент.

Секция 3 - Optional Tweaks

Если вы не используете частицы вспышки выстрелов (которые вы должны использовать, они же офигенные!), тогда у вас могут возникнуть проблемы со старыми частицами у оружий из CS:S. В этом случае используйте фикс, описанный ниже.

В c_baseanimating.cpp, на строке 3024(4181 в 2013), поставьте комментарий так, как написано здесь:

 			if ( iAttachment != -1 && m_Attachments.Count() > iAttachment )
 			{
 				/*
 				GetAttachment( iAttachment+1, attachOrigin, attachAngles );
 				int entId = render->GetViewEntity();
 				ClientEntityHandle_t hEntity = ClientEntityList().EntIndexToHandle( entId );
 				tempents->MuzzleFlash( attachOrigin, attachAngles, atoi( options ), hEntity, bFirstPerson );
 				*/
 			}

и вставьте следующий код после комментария:

 				if ( input->CAM_IsThirdPerson() )
 				{
 					C_BaseCombatWeapon *pWeapon = GetActiveWeapon();
 					pWeapon->GetAttachment( iAttachment+1, attachOrigin, attachAngles );
 				}
 				else
 				{
 					C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer();
 					CBaseViewModel *vm = pPlayer->GetViewModel();
 					vm->GetAttachment( iAttachment+1, attachOrigin, attachAngles );
 					engine->GetViewAngles( attachAngles );
 				}
 				g_pEffects->MuzzleFlash( attachOrigin, attachAngles, 1.0, MUZZLEFLASH_TYPE_DEFAULT );

Откройте fx.cpp, и под pParticle->m_vecVelocity.Init(); в FX_MuzzleFlash, поставьте следующий код:

 		C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer();
 		Vector velocity = pPlayer->GetLocalVelocity();
 		pParticle->m_vecVelocity += velocity;

Наслаждайтесь!

Ferrety (ferrety6012@gmail.com)