Stat overall size ( ALL )
Мне не нравится, как переключается оружие в ХЛ. Может, кому-то и интересно тыкать по менюшкам худа, но мне больше нравится реализация переключения в Unreal RTN, Quake Mission Packs и HL2
Переключение оружия a la HL2
Мне не нравится, как переключается оружие в ХЛ. Может, кому-то и интересно тыкать по менюшкам худа, но мне больше нравится реализация переключения в Unreal RTN, Quake Mission Packs и HL2
Author/s of tutorial : Scrama Views : 3496 ( +1 ) Uploader : Streit Created : 04/07/2011 9:25:14 PM Source : http://www.hlfx.ru/forum Rating : ( 5 ) Share :
Following translations are available : |
russian |
Мне не нравится, как переключается оружие в ХЛ. Может, кому-то и интересно тыкать по менюшкам худа, но мне больше нравится реализация переключения в Unreal RTN, Quake Mission Packs и HL2. Сейчас я расскажу как это сделать.
Работать придется только на клиенте, с файлом ammo.cpp. Для того, чтоб нормально переключится на следующее оружие в слоте, нам нужно знать какое мы держим в руках. На клиенте уже принимается и обрабатывается сообщение о текущем оружии, но данные заносятся в private переменную и в SelectSlot мы ее прочитать не можем. Можно сделать эту переменную (CHudAmmo.m_pWeapon) public, но я решил просто завести новую.
Итак, находим строчки (сразу после #include'ов)
WEAPON *gpActiveSel;// NULL means off, 1 means just the menu bar, otherwise
// this points to the active weapon menu item
WEAPON *gpLastSel;// Last weapon menu selection
и дописываем туда еще одну переменную
WEAPON *gpCurWeapon;// Just a current weapon
Теперь нужно в нее заносить значения, для этого ищем функцию
int CHudAmmo::MsgFunc_CurWeapon(const char *pszName, int iSize, void *pbuf )
И находим в ней присвоение
после которого пишем свое:
На этом приготовления кончились, но для меня оказались самой сложной частью =)
Тепрь идем в функцию
void WeaponsResource :: SelectSlot( int iSlot, int fAdvance, int iDirection )
и будем работать с ней. Так как у любого нововведения найдутся противники, с нашей стороны будет мудро не лишать их стандартных алгоритмов переключения оружия %/ Для этого мы позволим консольной переменной принмать значение 2. Вернее, значение она и так может принимать любое вещественное, но вот в коде она считывается в bool. Найдем это место
bool fastSwitch = CVAR_GET_FLOAT( "hud_fastswitch" ) != 0;
int fastSwitch = CVAR_GET_FLOAT( "hud_fastswitch" );
Чуть ниже есть такой код:
if ( !p2 )
{// only one active item in bucket, so change directly to weapon
ServerCmd( p->szName );
g_weaponselect = p->iId;
return;
}
Он отвечает за быстрое переключение оружия, если в указанном слоте только один ствол. Ровно после закрывающей скобочки добавляем следующий код:
else if ( fastSwitch > 1 )
{
if (gpCurWeapon ->iSlot == iSlot)// Scrama: if current weapon is in selected slot
{
p = GetNextActivePos( gpCurWeapon->iSlot, gpCurWeapon->iSlotPos );
// switch to next active position
if ( !p ) p = GetFirstPos( gpCurWeapon->iSlot );
// if no next active position then switch to first weapon in slot
ServerCmd( p->szName );
g_weaponselect = p->iId;
return;
}
else // Other slot
{
ServerCmd( p->szName );
g_weaponselect = p->iId;
return;
}
}
Теперь можно компилировать и наслаждаться правильным переключением пушек. И не забудьте прописать в консоли hud_fastswitch 2, иначе все будет как прежде =).
Similar 1. Создание нового оружия - В этом туторе не будет объяснено КАК сделать новое оружие, ибо для каждого оружия нужен свой код. Здесь просто будет приведена информация о тех нюансах без которых ваше оружие не будет работать 2. Разбираемся в коде пушки МР5 - По просьбам трудящихся коментирую код МР5 3. Изменяем классы монстров злой барн - Как известно, первое что хочет сделать начинающий кодер (по крайней так было у меня ) это написать какое-нибудь оружие и изменить монстров. 4. И снова наследование классов :) - Казалось бы тема наследования классов давно избита, ан нет всё ещё существуют вопросы, правда про чуть боле сложное наследование. 5. Trigger_PlayerFreeez - Trigger_PlayerFreeez (остановка игрока) 6. Удалённый контроль зарядника - Всегда хотелось, чтобы зарядник в хл был управляемым. 7. Цвет HUD - Цвет HUD 8. Неработающие двери :) - Как сделать, чтоб двери не открывались, когда нет света и рядом с ними был индикатор (красн. зел.) 9. Создание сценариев - Для создания сценариев (aka скриптов) в Half-Life существуют две энтити: scripted_sequence и scripted_sentence. Первая отвечает за движения, выполняемые монстром/персонажем, будь то ходьба, бег, нажатие кнопки, тряска автомата с газировкой или почёсывание подбородка. Вторая служит для того, чтобы персонаж произнес какую-то фразу. При этом его голова повернётся в сторону слушателя, и рот будет открываться в соответствии с амплитудой звука.
You cannot comment, because you are not logged-in.