Registration - or - Enter
MoonwalkerMoonwalker

Почувствуй себя космонавтом!...

23/03/2003
Kingdoms CollideKingdoms Collide

Шутер от третьего лица...

17/01/2011

Мне не нравится, как переключается оружие в ХЛ. Может, кому-то и интересно тыкать по менюшкам худа, но мне больше нравится реализация переключения в Unreal RTN, Quake Mission Packs и HL2


  • Description
  • Link and installation

Переключение оружия a la HL2

Мне не нравится, как переключается оружие в ХЛ. Может, кому-то и интересно тыкать по менюшкам худа, но мне больше нравится реализация переключения в Unreal RTN, Quake Mission Packs и HL2


Author/s of lesson : Scrama
Views : 949 ( +1 )
Uploaded by : Streit
Created : 04/07/2011 6:25:14 PM
Source : http://www.hlfx.ru/forum
Rating :
 ( 0 ) 
Share :


Available following translations : | russian |

Мне не нравится, как переключается оружие в ХЛ. Может, кому-то и интересно тыкать по менюшкам худа, но мне больше нравится реализация переключения в Unreal RTN, Quake Mission Packs и HL2. Сейчас я расскажу как это сделать. Работать придется только на клиенте, с файлом ammo.cpp. Для того, чтоб нормально переключится на следующее оружие в слоте, нам нужно знать какое мы держим в руках. На клиенте уже принимается и обрабатывается сообщение о текущем оружии, но данные заносятся в private переменную и в SelectSlot мы ее прочитать не можем. Можно сделать эту переменную (CHudAmmo.m_pWeapon) public, но я решил просто завести новую. Итак, находим строчки (сразу после #include'ов)

Code:

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

и дописываем туда еще одну переменную

Code:

WEAPON *gpCurWeapon;// Just a current weapon

Теперь нужно в нее заносить значения, для этого ищем функцию

Code:

int CHudAmmo::MsgFunc_CurWeapon(const char *pszName, int iSize, void *pbuf )

И находим в ней присвоение

Code:

m_pWeapon = pWeapon;

после которого пишем свое:

Code:

gpCurWeapon = pWeapon;

На этом приготовления кончились, но для меня оказались самой сложной частью =) Тепрь идем в функцию

Code:

void WeaponsResource :: SelectSlot( int iSlot, int fAdvance, int iDirection )

и будем работать с ней. Так как у любого нововведения найдутся противники, с нашей стороны будет мудро не лишать их стандартных алгоритмов переключения оружия %/ Для этого мы позволим консольной переменной принмать значение 2. Вернее, значение она и так может принимать любое вещественное, но вот в коде она считывается в bool. Найдем это место

Code:

bool fastSwitch = CVAR_GET_FLOAT( "hud_fastswitch" ) != 0;

и просто заменим ее на

Code:

int fastSwitch = CVAR_GET_FLOAT( "hud_fastswitch" );

Чуть ниже есть такой код:

Code:

if ( !p2 )
{// only one active item in bucket, so change directly to weapon
   ServerCmd( p->szName );
   g_weaponselect = p->iId;
   return;
}

Он отвечает за быстрое переключение оружия, если в указанном слоте только один ствол. Ровно после закрывающей скобочки добавляем следующий код:

Code:

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, иначе все будет как прежде =).



Similar1. Добавление ножа из Op4 - Добавление ножа из Op4
2. Исходный код ножа - weapon_knife (Нож) с двумя режимами атаки: Slash и Stab.
3. Новый монстр - В общем-то это самый лёгкий тутор который можно придумать.
4. Изменяем классы монстров злой барн - Как известно, первое что хочет сделать начинающий кодер (по крайней так было у меня ) это написать какое-нибудь оружие и изменить монстров.
5. Trigger_PlayerFreeez - Trigger_PlayerFreeez (остановка игрока)
6. Как сделать вортигонта из HL1 другом - Моя первая статья
You cannot comment, because you are not registered.
    UT3 Evangelion Model Pack v1.1 Final
    Unreal Tournament 3UT3 Evangelion Model Pack v1.1 Final
    OldSkool Amp'd
    Unreal Tournament 99OldSkool Amp'd
    Csejte Castle HerdCoop Map Pack V3
    Unreal Tournament 99Csejte Castle HerdCoop Map Pack V3
    Unreal Tournament 3 Original Soundtrack
    Unreal Tournament 3 Original Soundtrack