Графомания
Меню сайта


Категории каталога
Геймдев: Технологии
Геймдев: Разделочная
Геймдев: Персонажи
Программирование
Железный век
Художественное


Форма входа



Поиск


Друзья сайта
.::LvL - Q3A Maps Russian promode community



Приветствую Вас, Гость · RSS 23.04.2024, 13:18
Главная » Статьи » Геймдев: Технологии

Переключаем оружие: старая школа

Геймплей 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] подставьте удобные клавиши.
Категория: Геймдев: Технологии | Добавил: Scrama (25.04.2008) | Автор: Дмитрий Скрама
Просмотров: 1974 | Комментарии: 4 | Рейтинг: 5.0/1

Всего комментариев: 4
1 OffyGhost  
0
Вот этот ткод надо вшивать в любой мод

2 Gordon fiman  
0
да ет просто супер и как люди вроде тя до такова додумываюдца

3 AlMod  
0
Я может конечно чего-то не понимаю, но

bind [key] "weapon_crowbar"
bind [key] "weapon_9mmhandgun"
bind [key] "weapon_shotgun"

Так не проще ли?

Ответ: Проще, но это работает далеко не всегда. В тех же спиритах нету. По сути то, что я написал - это возвращение этой самой реализаци, но немного иначе.

4 SiPlus  
0
а команда use есть?
Ответ: Нет, нету. По идее, в некоторых версиях библиотек как-то так работает, но это я писал в первую очередь для спирита, там точно нету.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]