В этом учебнике я покажу как перенести оружие из CS:S в Half-life 2.
Возьмём любое оружие из CS:S, я взял наш любимый AK-47. Копируем фаилы оружия в Халву (Materials,Models,Sound). В папке Scripts найдём фаил weapon_smg1.txt, найдём вверху две строки viewmodel-это модель отображения в руках playermodel-это модель состороны, ну там если на полу валяется или в руках Комбаинов.
"viewmodel" "models/weapons/v_smg1.mdl" "playermodel" "models/weapons/w_smg1.mdl"
Заменяем на нашу модель:
"viewmodel" "models/weapons/v_rif_ak47.mdl" "playermodel" "models/weapons/w_rif_ak47.mdl"
Так с моделью всё. Заходим в игру берём SMG и видим что автомат у нас в левой руке и без вспышек, нам такой расклад ненужен!!! Будем исправлять: Чтобы оружие отображалось справой стороны нужно найти фаил в клиенте с названием c_baseviewmodel.cpp. Там найти:
#ifdef CSTRIKE_DLL ConVar cl_righthand( "cl_righthand", "1", FCVAR_ARCHIVE, "Use right-handed view models." ); #endif
и закоментировать ifdef и endif должно получится следующие:
//#ifdef CSTRIKE_DLL
ConVar cl_righthand( "cl_righthand", "1", FCVAR_ARCHIVE, "Use right-handed view models." );
//#endif
Теперь в фаиле weapon_smg1.txt перед SoundData вставим следующие строки:
"BuiltRightHanded" "0" "AllowFlipping" "1"
Всё сохраняем. Заходим в игру проверяем, теперь оружие у нас справа но вспышек не наблюдается. Будем исправлять этот косяк.
Заходим в c_baseanimating.cpp там находим строки:
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 ( iAttachment != -1 && m_Attachments.Count() > iAttachment ) { if ( input->CAM_IsThirdPerson() ) { C_BaseCombatWeapon *pWeapon = GetActiveWeapon(); if ( pWeapon ) { pWeapon->GetAttachment( iAttachment+1, attachOrigin, attachAngles ); } } else { C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer(); if ( pPlayer ) { CBaseViewModel *vm = pPlayer->GetViewModel(); if ( vm ) { vm->GetAttachment( iAttachment+1, attachOrigin, attachAngles ); attachAngles = pPlayer->EyeAngles(); g_pEffects->MuzzleFlash( attachOrigin, attachAngles, 1.0, MUZZLEFLASH_TYPE_DEFAULT ); } } }
Так теперь находим Fx.cpp он находится в Client->Source file-> Temporary Entities.
Находим там такую строку: pParticle->m_vecVelocity.Init();
И сразу после неё вставляем следующий код:
C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer(); if ( pPlayer ) { Vector velocity = pPlayer->GetLocalVelocity(); pParticle->m_vecVelocity += velocity; }
Всё теперь заходим в игру и видим что у нас всё в шоколаде!
Источник: http://stav-mapping.info/e107_plugins/content/content.php?content.51 |