Регистрация - или - Войти
RetributionRetribution

Отечественный мод, в котором мы можем сыграть за самого GMan´а!...

27/03/2003

Все, кто хотя бы один раз прошел Hl1 наверняка знает, что на карте c2a5 (там где плотина) есть такие прикольные бочки, которые подскакивают вверх и там взрываются.


  • Описание
  • Ссылка и установка

Летающие бочки и trigger_push

Все, кто хотя бы один раз прошел Hl1 наверняка знает, что на карте c2a5 (там где плотина) есть такие прикольные бочки, которые подскакивают вверх и там взрываются.


Автор / ы урока : Дядя Миша
Просмотров : 492 ( +1 )
Прислал / (а) : Streit
Дата создания : 07.04.2011 18:01:51
Источник : http://www.half-life.ru/forum
Рейтинг :
 ( 0 ) 
Поделиться :


Имеются следующие переводы : | русский |

Все, кто хотя бы один раз прошел Hl1 наверняка знает, что на карте c2a5 (там где плотина) есть такие прикольные бочки, которые подскакивают вверх и там взрываются. И все бы хорошо, да только эти бочки подскакивают вверх на полметра, а должны на самом деле взлетать высоко к небу. Очень мало кто видел этот скрипт работающим так как надо. И как правило вы могли это наблюдать на хл версии 1.0.1.5, а то и на более ранних. Проблема заключается в корявости кода самого trigger_push, который не придает func_pushable необходимого ускорения. Однако пофиксить этот баг несложно. Откройте triggers.cpp, найдите в нем строчку

Code:

void CTriggerPush :: Touch( CBaseEntity *pOther )

и замените в этой функции вот этот код

Code:

if ( pevToucher->solid != SOLID_NOT && pevToucher->solid != SOLID_BSP )
{
   // Instant trigger, just transfer velocity and remove
   if (FBitSet(pev->spawnflags, SF_TRIG_PUSH_ONCE))
   {
     pevToucher->velocity = pevToucher->velocity + (pev->speed * pev->movedir);
     if ( pevToucher->velocity.z > 0 )
       pevToucher->flags &= ~FL_ONGROUND;

     UTIL_Remove( this );
   }
   else
   { // Push field, transfer to base velocity
     Vector vecPush = (pev->speed * pev->movedir);
     if ( pevToucher->flags & FL_BASEVELOCITY )
       vecPush = vecPush + pevToucher->basevelocity;

     pevToucher->basevelocity = vecPush;
     pevToucher->flags |= FL_BASEVELOCITY;

     // ALERT( at_console, "Vel %f, base %f\n", pevToucher->velocity.z, pevToucher->basevelocity.z );
   }
}

на вот этот

Code:

if ( pevToucher->solid != SOLID_NOT ) //&& pevToucher->solid != SOLID_BSP )
{
   if(pevToucher->movetype == MOVETYPE_PUSHSTEP) //pushable related code
   {
     pevToucher->velocity = pevToucher->velocity + (pev->speed * pev->movedir);

     if ( pevToucher->velocity.z > 0 )
       pevToucher->flags &= ~FL_ONGROUND;

     pev->solid = SOLID_NOT; //push once. re-enable to affect again
   }
   else //other physobjects
   {
     // Push field, transfer to base velocity
     Vector vecPush = (pev->speed * pev->movedir);

     if ( pevToucher->flags & FL_BASEVELOCITY )
       vecPush = vecPush + pevToucher->basevelocity;

     pevToucher->basevelocity = vecPush;
     pevToucher->flags |= FL_BASEVELOCITY;

     //ALERT( at_console, "Vel %f, base %f\n", pevToucher->velocity.z, pevToucher->basevelocity.z );
   }

   if (FBitSet(pev->spawnflags, SF_TRIG_PUSH_ONCE)) UTIL_Remove( this );
}

Компилируем, запускаем с2а5 и наслаждаемся правильно летающими бочками (а этот скрипт довольно красиво выглядит, когда работает правильно).



Похожие1. Исходный код ножа - weapon_knife (Нож) с двумя режимами атаки: Slash и Stab.
2. Новые типы патронов - Каждый хоть раз добавлял в Хл новое оружие но ему не нравилось, что оно или слишком мощно стреляет или слишком слабо.
3. Новый монстр - В общем-то это самый лёгкий тутор который можно придумать.
4. И снова наследование классов :) - Казалось бы тема наследования классов давно избита, ан нет всё ещё существуют вопросы, правда про чуть боле сложное наследование.
5. Каждой пушке - спрайт - Итак вы создали новое оружие. А в меню выбора вместо рисунка непонятные спрайты, да и прицела нет.
6. Замедление игрока - Довольно забавно наблюдать, как игрок одинаково быстро бегает как с монтировкой в руках, так и с тяжелой базукой, хотя логичнее, что держа в руках сей девайс, он будет бегать медленнее
7. Мазлфлэш на брашах - Мазлфлэш на брашах
8. Создание сценариев - Для создания сценариев (aka скриптов) в Half-Life существуют две энтити: scripted_sequence и scripted_sentence. Первая отвечает за движения, выполняемые монстром/персонажем, будь то ходьба, бег, нажатие кнопки, тряска автомата с газировкой или почёсывание подбородка. Вторая служит для того, чтобы персонаж произнес какую-то фразу. При этом его голова повернётся в сторону слушателя, и рот будет открываться в соответствии с амплитудой звука.
Вы не можете комментировать, т.к. вы не зарегистрированы.
    Sleepytime
    Half-Life 2Sleepytime
    Machine Gun
    Half-LifeMachine Gun
    Lightning Gun
    Half-LifeLightning Gun
    Hyperblaster
    Half-LifeHyperblaster