Геймплей Half-life рассчитан на вдумчивые позиционные бои, где можно отойти в укрытие, перезарядится или сменить оружие. Вооружение игрока отсортировано по типам и разложено в слоты, из которых и выбирается. Наглядно, но медленно. Я уже экспериментировал с переключением оружия (SoHL RB 1.0), но полученый результат меня не удовлетворил. Геймплей К62, хоть и построен в стиле survival horror, но все же в боевом плане задумывался как аркадный, следовательно игрока нужно избавить от длительного переключения основного оружия. В итоге решение оказалось очень простым и в то же время радикально отличным от прежних экспериментов.
Итак, работать будем на сервере, в файлах player.h и player.cpp
Откроем player.h, найдем описание класса CBasePlayer и после строчки
BOOL SwitchWeapon( CBasePlayerItem *pWeapon );
Вставляем объявление:
BOOL IdSwitchWeapon( int idWeapon);
Теперь открываем player.cpp и находим там функцию CBasePlayer::SwitchWeapon(), после нее (после закрывающей фигурной скобки, естественно) вставляем следующую функцию:
BOOL CBasePlayer :: IdSwitchWeapon( int idWeapon)
{
CBasePlayerItem *pCheck;
int i;
for ( i = 0 ; i <= MAX_ITEM_TYPES ; i++ )
{
pCheck = m_rgpPlayerItems[ i ];
while (pCheck)
{
if ((pCheck) && (pCheck->m_iId == idWeapon) && (pCheck != m_pActiveItem))
{
if (pCheck->CanDeploy()) SwitchWeapon(pCheck);
return TRUE;
}
pCheck = pCheck->m_pNext;
}
}
return FALSE;
}
Теперь в этом же player.cpp находим функцию CBasePlayer::ImpulseCommands() и в конструкции swtch перед default добавляем строки для своего оружия, например:
case 221:
IdSwitchWeapon(WEAPON_CROWBAR);
break;
case 222:
IdSwitchWeapon(WEAPON_GLOCK);
break;
case 223:
IdSwitchWeapon(WEAPON_SHOTGUN);
break;
Естественно, импульсов можно занять и больше - хоть под все стволы (лично я взрывчатку оставлю по-старинке), только нужно следить, чтоб они уже не были заняты. Осталось вписать в конфиг:
bind [key] "impulse 221"
bind [key] "impulse 222"
bind [key] "impulse 223"
Вместо [key] подставьте удобные клавиши.
|