Среда, 20.09.2017, 15:55
 
Приветствую Вас Guest | RSS
Главная страница | Партиклы в оружии - Форум | Регистрация | Вход
[Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Игровая мастерская » Программирование » Партиклы в оружии
Партиклы в оружии
kon_alexДата: Вторник, 19.07.2011, 19:29 | Сообщение # 1
Newbie
Группа: Пользователи
Сообщений: 9
Репутация: 0
Статус: Offline
Решил сделать оружие по типу луча вортигонта, но партиклы выходят из рандомного места
http://s2.ipicture.ru/Gallery/Viewfull/5054444.html
http://s1.ipicture.ru/Gallery/Viewfull/5054529.html

Делал по тутору гаусса, менял код так:

Code

//DrawBeam( startPos, tr.endpos, 9.6, true ); // рисуем луч
  const char *k="muzzle";
  unsigned char uchAttachment;
  uchAttachment=LookupAttachment(k);
  EntityMessageBegin( this, true );
   WRITE_BYTE( 0 );
   WRITE_BYTE( uchAttachment );
   //WRITE_VEC3COORD( pOwner->Weapon_ShootPosition() );
   WRITE_VEC3COORD( tr.endpos );
  MessageEnd();


Далее полная аналогия с вортигонтом(клиент):

Code

void C_WeaponVort::ReceiveMessage( int classID, bf_read &msg )
{
  // Is the message for a sub-class?
  if ( classID != GetClientClass()->m_ClassID )
  {
   BaseClass::ReceiveMessage( classID, msg );
   return;
  }
   
  int messageType = msg.ReadByte();
  switch( messageType )
  {
  case 0:
   {
    // Find our attachment point
    unsigned char nAttachment = msg.ReadByte();
     
    // Get our attachment position
    Vector vecStart;
    QAngle vecAngles;
    GetAttachment( nAttachment, vecStart, vecAngles );

    // Get the final position we'll strike
    Vector vecEndPos;
    msg.ReadBitVec3Coord( vecEndPos );

    // Place a beam between the two points
    CNewParticleEffect *pEffect = ParticleProp()->Create( "vortigaunt_beam", PATTACH_POINT_FOLLOW, "missle" );
    if ( pEffect )
    {
     pEffect->SetControlPoint( 0, vecStart );
     pEffect->SetControlPoint( 1, vecEndPos );
    }
   }
   break;

  case 1:
   {
    int nIndex = msg.ReadLong();
    C_BaseEntity *pEnt = ClientEntityList().GetBaseEntityFromHandle( ClientEntityList().EntIndexToHandle( nIndex ) );

    if ( pEnt )
    {
     unsigned char nAttachment = msg.ReadByte();
     Vector vecEndPos;
     msg.ReadBitVec3Coord( vecEndPos );
      
     Vector vecNormal;
     msg.ReadBitVec3Normal( vecNormal );
      
     CNewParticleEffect *pEffect = pEnt->ParticleProp()->Create( "vortigaunt_beam_charge", PATTACH_POINT_FOLLOW, nAttachment );
     if ( pEffect )
     {
      // Set the control point's angles to be the surface normal we struct
      Vector vecRight, vecUp;
      VectorVectors( vecNormal, vecRight, vecUp );
      pEffect->SetControlPointOrientation( 1, vecNormal, vecRight, vecUp );
      pEffect->SetControlPoint( 1, vecEndPos );
     }
    }
   }
   break;
  default:
   AssertMsg1( false, "Received unknown message %d", messageType);
  }
}


Объясните, в чем может быть проблема
 
HellMapperДата: Вторник, 19.07.2011, 21:31 | Сообщение # 2
Scout
Группа: Проверенные
Сообщений: 588
Репутация: 27
Статус: Offline
Измени аттачменты на дуло оружия. Смотришь Model Viewer и делаешь по аналогии с обычной пушкой.

Я живу в будущем City 15







Если Вы можете, играя в "Counter-Strike: Sourсe", посадить хедшот ножом через стену в попу своему противнику, который находится на другом конце карты, на другом сервере, и который играет в "Team Fortress 2" и находится под действием убер-заряда, то знайте, что в плане читерства вы достигли совершенства. ©IPa
 
kon_alexДата: Вторник, 19.07.2011, 21:37 | Сообщение # 3
Newbie
Группа: Пользователи
Сообщений: 9
Репутация: 0
Статус: Offline
так muzzle - аттачмент пистолета, его модель и используется
 
AndreazzzДата: Вторник, 19.07.2011, 22:30 | Сообщение # 4
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
kon_alex, ну не совсем так, я делал это по другому (и да, нужно использовать "muzzle")

 
kon_alexДата: Вторник, 19.07.2011, 23:27 | Сообщение # 5
Newbie
Группа: Пользователи
Сообщений: 9
Репутация: 0
Статус: Offline
Andreazzz, а как надо?
 
AndreazzzДата: Среда, 20.07.2011, 11:52 | Сообщение # 6
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
Ну не в ReceiveMessage это точно, и не ParticleProp а DispatchParticleEffect. Работать нужно в Think Получится что-то в роде этого:
Code
CBaseViewModel *vm = pPlayer->GetViewModel();
if( vm )
{
  if( pPlayer->m_nButtons & IN_ATTACK )
   DispatchParticleEffect( "vortigaunt_beam", PATTACH_POINT_FOLLOW, vm, vm->LookupAttachment( "missle" ), true );
  elseif( pPlayer->m_nButtons & IN_ATTACK2 )
   DispatchParticleEffect( "vortigaunt_beam_charge", PATTACH_POINT_FOLLOW, vm, vm->LookupAttachment( "missle" ), true );
  else
   StopParticleEffects( vm );
}




Было отредактированно - Andreazzz - Среда, 20.07.2011, 12:00
 
kon_alexДата: Четверг, 21.07.2011, 21:41 | Сообщение # 7
Newbie
Группа: Пользователи
Сообщений: 9
Репутация: 0
Статус: Offline
Подскажите, как исправить ошибку Bone access not allowed. Кстати попробовал Dispatch, вышло криво(только на дальних дистанциях и без стен рядом работает нормально), а Prop стал работать
 
AndreazzzДата: Четверг, 21.07.2011, 23:10 | Сообщение # 8
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
kon_alex, ну здесь тебе решать, что выбирать.

 
kon_alexДата: Среда, 03.08.2011, 19:46 | Сообщение # 9
Newbie
Группа: Пользователи
Сообщений: 9
Репутация: 0
Статус: Offline
Подскажите, как все-таки сделать нормально wacko Dispatch работает аттач, но приходит в рандомную точку (http://ipicture.ru/uploads/20110803/ktGYrIrA.jpg)
Prop приводит в нужную точку, но старт идет с середины игрока (http://ipicture.ru/uploads/20110803/V4rna85I.jpg)
 
HitmenДата: Четверг, 04.08.2011, 00:12 | Сообщение # 10
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
Аттач:
Code
Vector myVector1;
GetAttachment( "ТУТ_ИМЯ_АТТАЧА_НА_МОДЕЛИ", myVector1 );


А если хочешь сделать партикль аттачнутый на конец ствола, то попробуй такой код:
Code
Vector vecShootOrigin2;
QAngle angShootDir2;
GetAttachment( LookupAttachment("ИМЯ_АТТАЧА_НА_МОДЕЛИ", vecShootOrigin2, angShootDir2));
DispatchParticleEffect( "ИМЯ_ПАРТИКЛЯ", vecShootOrigin2, angShootDir2);


Туториалы по программированию, мои и слегка изменённые чужие. :)

Sp@ce Project Blog
Sp@ce Project Web-Site

I'm in spaaace!
Я в контакте
Я в Facebook'е

 
Форум » Игровая мастерская » Программирование » Партиклы в оружии
Страница 1 из 11
Поиск:

Помощь в разработке форума: HOMiE7