HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- кодеры помогите не работает displacer (https://hlfx.ru/forum/showthread.php?threadid=5320)
Отправлено демид 28-07-2019 в 06:16:
 кодеры помогите не работает displacer
 кодеры помогите не работает displacer
displacer сам стреляет но анимации выстрела так самого нет и звука выстрела нет уже целый день пытаюсь исправить данный баг никак не получается справиться с этой проблемой вот сам код дисплекера:
C++ Source Code:
| 4 | *   Code by Shambler Team. | 
| 5 | *   Op4-realm modify by Demiurge. | 
| 12 | //========================================================= | 
| 14 | //    CODE PART FOR CLIENT SIDE | 
| 16 | //====================== | 
| 18 | //====================== | 
| 29 | void EV_SpinDisplacer(event_args_t *args)//Original code idea by Xwider | 
| 31 |     if (EV_IsLocal(args->entindex)) | 
| 33 |         gEngfuncs.pEventAPI->EV_WeaponAnimation(DISPLACER_SPINUP, 2); | 
| 34 |         cl_entity_t *view = gEngfuncs.GetViewModel(); | 
| 39 |             gEngfuncs.pEfxAPI->R_BeamEnts(view->index | 0x2000, view->index | 0x1000, args->iparam2, life, 0.5, 0.5, 0.5, 0.6, 0, 10, 2, 10, 0); | 
| 40 |             gEngfuncs.pEfxAPI->R_BeamEnts(view->index | 0x3000, view->index | 0x1000, args->iparam2, life, 0.5, 0.5, 0.5, 0.6, 0, 10, 2, 10, 0); | 
| 41 |             gEngfuncs.pEfxAPI->R_BeamEnts(view->index | 0x4000, view->index | 0x1000, args->iparam2, life, 0.5, 0.5, 0.5, 0.6, 0, 10, 2, 10, 0); | 
| 45 |     if (args->bparam2 == 0)// sound mode | 
| 46 |         gEngfuncs.pEventAPI->EV_PlaySound(args->entindex, args->origin, CHAN_WEAPON, "weapons/displacer_spin.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); | 
| 48 |         gEngfuncs.pEventAPI->EV_PlaySound(args->entindex, args->origin, CHAN_WEAPON, "weapons/displacer_spin2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM); | 
| 51 | //====================== | 
| 53 | //====================== | 
| 78 | class CDisplacer : public CBasePlayerWeapon | 
| 81 |   int    Save( CSave &save ); | 
| 82 |   int    Restore( CRestore &restore ); | 
| 83 |   static    TYPEDESCRIPTION m_SaveData[]; | 
| 86 |   void Precache( void ); | 
| 87 |   int iItemSlot( void ) { return 4; } | 
| 88 |   int GetItemInfo(ItemInfo *p); | 
| 89 |   int AddToPlayer( CBasePlayer *pPlayer ); | 
| 92 |   void Holster( int skiplocal = 0 ); | 
| 94 |   void PrimaryAttack( void ); | 
| 95 |   void SecondaryAttack (void); | 
| 96 |   void EXPORT SpinUp( void ); | 
| 97 |   void EXPORT Teleport( void ); | 
| 98 |   void EXPORT Fire( void ); | 
| 99 |   void WeaponIdle( void ); | 
| 101 |   int m_iAttackMode;//no need save/restore this. g-cont | 
| 103 |   unsigned short m_usDisplacer; | 
| 108 | LINK_ENTITY_TO_CLASS( weapon_displacer, CDisplacer ); | 
| 110 | //=========================== | 
| 114 | //=========================== | 
| 116 | //class CDispBall : public CGrenade | 
| 117 | class CDispBall : public CBaseEntity//Special for Ghoul [BB] :devil: | 
| 121 |   void Precache( void ); | 
| 122 |   void Explode( TraceResult *pTrace ); | 
| 123 |   void RemoveBall (void); | 
| 124 |   void EXPORT ExplodeTouch( CBaseEntity *pOther ); | 
| 126 |   void EXPORT BallThink( void ); | 
| 127 |   static CDispBall *CreateDispBall( Vector vecOrigin, Vector vecAngles, CBaseEntity *pOwner, CDisplacer *pLauncher ); | 
| 133 | LINK_ENTITY_TO_CLASS( dispball, CDispBall ); | 
| 135 | CDispBall *CDispBall::CreateDispBall( Vector vecOrigin, Vector vecAngles, CBaseEntity *pOwner, CDisplacer *pLauncher ) | 
| 137 |   CDispBall *pDispBall = GetClassPtr( (CDispBall *)NULL ); | 
| 139 |   UTIL_SetOrigin( pDispBall->pev, vecOrigin ); | 
| 140 |   pDispBall->pev->angles = vecAngles; | 
| 142 |   pDispBall->SetTouch( CDispBall::ExplodeTouch ); | 
| 143 |   pDispBall->pev->owner = pOwner->edict(); | 
| 148 | void CDispBall :: Spawn( void ) | 
| 151 |   pev->movetype = MOVETYPE_FLY; | 
| 152 |   pev->solid = SOLID_BBOX; | 
| 154 |   SET_MODEL(ENT(pev), "sprites/exit1.spr"); | 
| 157 |   UTIL_SetSize(pev, Vector ( 0, 0, 0 ), Vector ( 0, 0, 0 ) ); | 
| 158 |   UTIL_SetOrigin( pev, pev->origin ); | 
| 159 |   pev->rendermode = kRenderTransAdd; | 
| 160 |   pev->renderamt = 255; | 
| 162 |   pev->classname = MAKE_STRING("dispball"); | 
| 164 |   SetThink( BallThink ); | 
| 165 |   SetTouch( ExplodeTouch ); | 
| 168 |   UTIL_MakeVectors( pev->angles ); | 
| 169 |   pev->angles.x = -(pev->angles.x + 0); | 
| 170 |   pev->velocity = gpGlobals->v_forward * 500; | 
| 171 |   pev->nextthink = 0.5; | 
| 176 | void CDispBall :: Precache( void ) | 
| 178 |   PRECACHE_MODEL("sprites/exit1.spr"); | 
| 179 |   PRECACHE_MODEL ("sprites/plasma.spr"); | 
| 181 |   PRECACHE_SOUND("weapons/displacer_teleport.wav"); | 
| 182 |   m_iDispRing = PRECACHE_MODEL ("sprites/displacer_ring.spr"); | 
| 185 | void CDispBall :: BallThink( void ) | 
| 192 |   for (int i = 0; i < 10; i++) | 
| 194 |     Vector vecDir = Vector( RANDOM_FLOAT( -1.0, 1.0 ), RANDOM_FLOAT( -1.0, 1.0 ),RANDOM_FLOAT( -1.0, 1.0 ) ); | 
| 195 |     vecDir = vecDir.Normalize(); | 
| 197 |     UTIL_TraceLine( pev->origin, pev->origin + vecDir * 1024, ignore_monsters, ENT(pev), &tr1 ); | 
| 198 |     if (flDist > tr1.flFraction) | 
| 201 |       flDist = tr.flFraction; | 
| 205 |   if ( flDist == 1.0 ) return; | 
| 207 |   pBeam = CBeam::BeamCreate("sprites/plasma.spr",200); | 
| 208 |   pBeam-> PointEntInit( tr.vecEndPos, entindex() ); | 
| 209 |   pBeam->SetStartPos( tr.vecEndPos ); | 
| 210 |   pBeam->SetEndEntity( entindex() ); | 
| 211 |   pBeam->SetColor( 90, 170, 16 ); | 
| 212 |   pBeam->SetNoise( 65 ); | 
| 213 |   pBeam->SetBrightness( 255 ); | 
| 214 |   pBeam->SetWidth( 30 ); | 
| 215 |   pBeam->SetScrollRate( 35 ); | 
| 216 |   pBeam->LiveForTime( 1 ); | 
| 218 |   pev->frame += 1; //animate teleball | 
| 220 |     pev->frame = fmod( pev->frame, 24 ); | 
| 222 |   pev->nextthink = gpGlobals->time + 0.1; | 
| 225 | void CDispBall::ExplodeTouch( CBaseEntity *pOther ) | 
| 228 |   Vector    vecSpot;// trace starts here! | 
| 230 |   pev->enemy = pOther->edict(); | 
| 232 |   vecSpot = pev->origin - pev->velocity.Normalize() * 32; | 
| 233 |   UTIL_TraceLine( vecSpot, vecSpot + pev->velocity.Normalize() * 64, dont_ignore_monsters, ENT(pev), &tr ); | 
| 238 | void CDispBall::Explode( TraceResult *pTrace ) | 
| 240 |   if(!LockRing)//for partially fix strange bug in HL engine (for full fix teleball MUST be moved to client side). g-cont | 
| 242 |     MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); | 
| 243 |     WRITE_BYTE( TE_BEAMCYLINDER ); | 
| 244 |     WRITE_COORD( pev->origin.x); | 
| 245 |     WRITE_COORD( pev->origin.y); | 
| 246 |     WRITE_COORD( pev->origin.z); | 
| 247 |     WRITE_COORD( pev->origin.x); | 
| 248 |     WRITE_COORD( pev->origin.y); | 
| 249 |     WRITE_COORD( pev->origin.z + 800); | 
| 250 |     WRITE_SHORT( m_iDispRing ); | 
| 251 |     WRITE_BYTE( 0 ); // startframe | 
| 252 |     WRITE_BYTE( 10 ); // framerate | 
| 253 |     WRITE_BYTE( 3 ); // life | 
| 254 |     WRITE_BYTE( 20 );  // width | 
| 255 |     WRITE_BYTE( 0 );   // noise | 
| 256 |     WRITE_BYTE( 255 );   // r, g, b | 
| 257 |     WRITE_BYTE( 255 );   // r, g, b | 
| 258 |     WRITE_BYTE( 255 );   // r, g, b | 
| 259 |     WRITE_BYTE( 255 ); //brightness | 
| 260 |     WRITE_BYTE( 0 );// speed | 
| 265 |   pev->velocity = g_vecZero; | 
| 267 |   SetThink (RemoveBall); | 
| 268 |   pev->nextthink = gpGlobals->time + 0.6; | 
| 272 | void CDispBall::RemoveBall( void ) | 
| 274 |   EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/displacer_teleport.wav", 0.9, ATTN_NORM); | 
| 275 |   pev->effects |= EF_NODRAW; | 
| 279 |     pevOwner = VARS( pev->owner ); | 
| 285 |   ::RadiusDamage( pev->origin, pev, pevOwner, pev->dmg, 200, CLASS_NONE, DMG_ENERGYBEAM ); | 
| 288 | //=========================== | 
| 292 | //=========================== | 
| 294 | void CDisplacer::Spawn( ) | 
| 297 |   m_iId = WEAPON_DISPLACER; | 
| 298 |   SET_MODEL(ENT(pev), "models/w_displacer.mdl"); | 
| 301 |   FallInit();// get ready to fall down. | 
| 304 | TYPEDESCRIPTION    CDisplacer::m_SaveData[] = | 
| 306 |   DEFINE_FIELD( CDisplacer, m_iPlace, FIELD_INTEGER ),//Remember last teleportation point. g-cont | 
| 308 | IMPLEMENT_SAVERESTORE( CDisplacer, CBasePlayerWeapon ); | 
| 310 | int CDisplacer::AddToPlayer( CBasePlayer *pPlayer ) | 
| 312 |   if ( CBasePlayerWeapon::AddToPlayer( pPlayer ) ) | 
| 314 |     MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev ); | 
| 322 | BOOL CDisplacer::Deploy( void ) | 
| 324 |   return DefaultDeploy( "models/v_displacer.mdl", "models/p_displacer.mdl", DISPLACER_DRAW, "gauss" ); | 
| 327 | void CDisplacer::Holster( int skiplocal ) | 
| 329 |   m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.5; | 
| 330 |   SendWeaponAnim( DISPLACER_HOLSTER ); | 
| 333 | int CDisplacer::GetItemInfo(ItemInfo *p) | 
| 335 |   p->pszName = STRING(pev->classname); | 
| 336 |   p->pszAmmo1 = "uranium"; | 
| 337 |   p->iMaxAmmo1 = URANIUM_MAX_CARRY; | 
| 340 |   p->iMaxClip = WEAPON_NOCLIP; | 
| 343 |   p->iId = m_iId = WEAPON_DISPLACER; | 
| 345 |   p->iWeight = DISPLACER_WEIGHT; | 
| 350 | void CDisplacer::Precache( void ) | 
| 352 |   PRECACHE_MODEL("models/w_displacer.mdl"); | 
| 353 |   PRECACHE_MODEL("models/v_displacer.mdl"); | 
| 354 |   PRECACHE_MODEL("models/p_displacer.mdl"); | 
| 356 |   PRECACHE_SOUND("weapons/displacer_fire.wav"); | 
| 357 |   PRECACHE_SOUND ("buttons/button10.wav"); | 
| 358 |   PRECACHE_SOUND ("weapons/displacer_self.wav"); | 
| 360 |   UTIL_PrecacheOther( "dispball" ); | 
| 362 |   m_iBeam = PRECACHE_MODEL("sprites/plasma.spr"); | 
| 363 |   m_usDisplacer = PRECACHE_EVENT( 1, "events/displacer.sc" ); | 
| 366 | void CDisplacer::SpinUp ( void ) | 
| 371 |   if (!m_iAttackMode) SetThink (CDisplacer::Fire); | 
| 372 |   else SetThink (CDisplacer::Teleport); | 
| 375 |   PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usDisplacer, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, 0, m_iBeam, 0, m_iAttackMode); | 
| 377 |   pev->nextthink = gpGlobals->time + 1.1; | 
| 378 |   m_flTimeWeaponIdle = gpGlobals->time + 1.15; | 
| 381 | void CDisplacer::PrimaryAttack( void ) | 
| 383 |   if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] < 20) | 
| 385 |     EMIT_SOUND( edict(), CHAN_BODY, "buttons/button10.wav", 1, ATTN_NORM ); | 
| 386 |     m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0; | 
| 390 |   m_iAttackMode = FALSE; | 
| 392 |   SetThink (CDisplacer::SpinUp); | 
| 394 |   m_flNextPrimaryAttack = gpGlobals->time + 2.0; | 
| 395 |   m_flTimeWeaponIdle = gpGlobals->time + 1.5; | 
| 396 |   pev->nextthink = gpGlobals->time + 0.1; | 
| 399 | void CDisplacer::SecondaryAttack ( void ) | 
| 401 |   if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] < 60) | 
| 403 |     EMIT_SOUND( edict(), CHAN_BODY, "buttons/button10.wav", 1, ATTN_NORM ); | 
| 404 |     m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0; | 
| 408 |   if (m_iAttackMode) return; | 
| 409 |   m_iAttackMode = TRUE; | 
| 411 |   SetThink (CDisplacer::SpinUp); | 
| 413 |   m_flNextSecondaryAttack = gpGlobals->time + 2.0; | 
| 414 |   m_flTimeWeaponIdle = gpGlobals->time + 1.5; | 
| 415 |   pev->nextthink = gpGlobals->time + 0.1; | 
| 418 | void CDisplacer::Fire (void) | 
| 420 |   SendWeaponAnim( DISPLACER_FIRE ); | 
| 421 |   m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); | 
| 423 |   Vector vecSrc = m_pPlayer->GetGunPosition( ) + gpGlobals->v_forward * 16 + gpGlobals->v_right * 2 + gpGlobals->v_up * -5; | 
| 424 |   m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= 20; | 
| 426 |   EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/displacer_fire.wav", 0.9, ATTN_NORM ); | 
| 427 |   CDispBall *pDispBall = CDispBall::CreateDispBall( vecSrc, m_pPlayer->pev->v_angle, m_pPlayer, this ); | 
| 431 | void CDisplacer:: Teleport ( void ) | 
| 433 |   m_iPlace = !m_iPlace; | 
| 435 |   CBaseEntity *pSpot = NULL; | 
| 436 |   m_iAttackMode = FALSE;//reset firemode | 
| 438 |   if ( m_iPlace )//Xen and earth target | 
| 439 |     pSpot = UTIL_FindEntityByClassname( pSpot, "info_xen" ); | 
| 441 |     pSpot = UTIL_FindEntityByClassname( pSpot, "info_earth" ); | 
| 445 |     UTIL_ScreenFade( m_pPlayer, Vector(0, 200, 0), 0.5, 0.5, 255, FFADE_IN ); | 
| 447 |     m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= 60; | 
| 448 |     Vector tmp = pSpot->pev->origin; | 
| 449 |     tmp.z -= m_pPlayer->pev->mins.z; | 
| 451 |     UTIL_SetOrigin( m_pPlayer->pev, tmp ); | 
| 453 |     m_pPlayer->pev->angles = pSpot->pev->angles; | 
| 454 |     m_pPlayer->pev->velocity = m_pPlayer->pev->basevelocity = g_vecZero; | 
| 456 |     EMIT_SOUND( edict(), CHAN_BODY, "weapons/displacer_self.wav", 1, ATTN_NORM ); | 
| 457 |     SendWeaponAnim( DISPLACER_FIRE ); | 
| 461 |     SendWeaponAnim( DISPLACER_SPINUP ); | 
| 462 |     EMIT_SOUND( edict(), CHAN_BODY, "buttons/button10.wav", 1, ATTN_NORM ); | 
| 463 |     m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.3; | 
| 466 |   m_flNextSecondaryAttack = gpGlobals->time + 2.0; | 
| 467 |   m_flTimeWeaponIdle = gpGlobals->time + 1.0; | 
| 470 | void CDisplacer::WeaponIdle( void ) | 
| 474 |   m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES ); | 
| 476 |   if ( m_flTimeWeaponIdle > gpGlobals->time ) | 
| 479 |   float flRand = RANDOM_FLOAT(0,1); | 
| 483 |     iAnim = DISPLACER_IDLE1; | 
| 484 |     m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT(10,15); | 
| 488 |     iAnim = DISPLACER_IDLE2; | 
| 489 |     m_flTimeWeaponIdle = gpGlobals->time + 3; | 
| 492 |   SendWeaponAnim( iAnim ); | 
 
у меня есть еще видео  данной проблемы но выложить не получается  .
 .__________________
Тихонов
Отправлено XaeroX 28-07-2019 в 07:42:
 
Цитата:
демид писал:
CODE PART FOR CLIENT SIDE
Ты вот этот код, что в комментарии, перенеси в ev_hldm.cpp.
И ещё там надо HOOK_EVENT где-то дописать в клиентке, для displacer.sc.__________________
Отправлено демид 28-07-2019 в 09:36:
 
появилась ошибка при компиляции 
hl_events.obj : error LNK2001: unresolved external symbol _EV_displacer
__________________
Тихонов
Отправлено XaeroX 28-07-2019 в 09:52:
 
EV_SpinDisplacer надо
__________________
Отправлено демид 28-07-2019 в 11:38:
 
опять эта ошибка в чем прикол не понимаю
hl_events.obj : error LNK2001: unresolved external symbol _EV_SpinDisplacer
Добавлено 28-07-2019 в 14:38:
ладно не парьтесь я уже понял все и сделал как надо вот файлы фикса просто поменяйте файлы если кому надо то что его глючит с переходами я так и не понял почему наверно ему нужно время на перезагрузку.
__________________
Тихонов
Отправлено демид 28-07-2019 в 11:46:
 
вот еще один фикс бага перехода с карты на карту
__________________
Тихонов
Отправлено Step4enko 28-07-2019 в 11:59:
 
Вот видишь, ты сам разобрался! 
Отправлено Ku2zoff 28-07-2019 в 17:05:
 
Молодцы, молодёжь. Надо учиться кодить самостоятельно. Касаемо дисплейсера, я делал так, чтобы дисп-шар не просто разрывал в мясо противника, а именно телепортировал его в особое место на карте, где смэрть. Очень прикольно это использовать в мультиплеере.
Отправлено демид 28-07-2019 в 17:18:
 
в мультиплеере та все прикольно а вот в сингле не очень после перехода с карты на карту оружие просто зависает и не хочет работать и стрелять пс fix2 проверял не работает по глупости выложил. Может кто знает как этот баг исправить.
__________________
Тихонов
Отправлено XaeroX 28-07-2019 в 17:19:
 
демид 
А после сохранения и загрузки - работает нормально?
__________________
Отправлено демид 28-07-2019 в 17:45:
 
не проверял сейчас попробую а что
Добавлено 28-07-2019 в 20:29:
после сохранения и загрузки работает нормально
Добавлено 28-07-2019 в 20:45:
скажите чесно вы знаете как этот баг исправить или я просто зря трачу время на displacera и пойду другую пушку кодить просто я уже много исходников displacera испробовал и все равно такая же проблема. кстати у меня есть свой интересный проект по оружию deagle кто нибуть хочет посмотреть на мой исходник дигла там надо только количество патронов поменять с 6 на 10 а так исходник крутой.
__________________
Тихонов
Отправлено Ku2zoff 28-07-2019 в 18:48:
 
Цитата:
демид писал:
после перехода с карты на карту оружие просто зависает и не хочет работать и стрелять
Цитата:
демид писал:
после сохранения и загрузки работает нормально
Лучше писать новое оружие на основе старого, если у тебя недостаточно опыта. Например, берёшь MP5, оставляешь только вторичную атаку из подствольника, а вместо гранат спавнишь дисп-шары. Именно в коде дисплейсера, наибольшую сложность представляет клиентский эвент с зелёными лучами на створках его "ствола", при выстреле, т.к. там надо их правильно закрепить к аттачментам:
C++ Source Code:
| gEngfuncs.pEfxAPI->R_BeamEnts(view->index | 0x2000, view->index | 0x1000, args->iparam2, life, 0.5, 0.5, 0.5, 0.6, 0, 10, 2, 10, 0); | 
 
view->index | 0xблабла и есть номер аттачмента в модели, к которому крепятся оба конца темпэнтити луча.
Отправлено демид 28-07-2019 в 19:00:
 
предлагаешь заменить это ?
gEngfuncs.pEfxAPI->R_BeamEnts(view->index | 0x2000, view->index | 0x1000, args->iparam2, life, 0.5, 0.5, 0.5, 0.6, 0, 10, 2, 10, 0);
Добавлено 28-07-2019 в 21:55:
на то которое у меня есть
Добавлено 28-07-2019 в 22:00:
может надо правильную модель displacera найти
__________________
Тихонов
Отправлено Ku2zoff 28-07-2019 в 19:03:
 
Да нет же. Ты пишешь, что у тебя дисплейсер перестаёт стрелять после чейнджлевела. Возьми за основу исходную пушку, которая стреляет норм после чейнджлевела, и напиши дисплейсер на её основе, с оглядками на код из тутора, я вот о чём.
Добавлено 29-07-2019 в 02:03:
Цитата:
демид писал:
может надо правильную модель displacera найти
В опфоре так-то самая правильная модель. Уже 20 лет как она там есть. Дело не в модели, дело в коде пушки.
Отправлено демид 28-07-2019 в 19:15:
 
слушай я тут модель декомпилировал может посмотришь на исходник v_displacer.qc в модели как раз есть эти аттачменты: вот исходник-сам код
/*
==============================================================================
QC script generated by Half-Life MDL Decompiler 1.2 
2003, Kratisto. Based on code from Valve's HL SDK.
v_displacer.mdl
Original internal name:
"v_displacer.mdl"
==============================================================================
*/
$modelname "v_displacer.mdl"
$cd ".\"
$cdtexture ".\"
$scale 1.0
$cliptotextures
$bbox 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
$cbox 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
$eyeposition 0.000000 0.000000 0.000000
//reference mesh(es)
$body "body" "displacer_reference"
$body "studio" "v_gordon_hands_ref"
$body "body" "glow_reference"
$texrendermode "GLOW.bmp" "additive" 
// 4 attachment(s)
$attachment 0 "blast_emitter" 0.000000 -15.000000 0.000000
$attachment 1 "reflector01" 0.000000 -2.000000 0.000000
$attachment 2 "reflector02" 0.000000 -2.000000 0.000000
$attachment 3 "reflector03" 0.000000 -2.000000 0.000000
// 12 hit box(es)
$hbox 0 "Bip01 L Forearm" -0.530000 -1.520000 -3.110000 11.368421 2.090000 1.560000
$hbox 0 "Bip01 L Hand" 0.000000 -1.150000 -2.140000 3.789475 0.770000 1.850000
$hbox 0 "Bip01 L Finger0" 0.000000 -0.870000 -0.510000 2.440000 0.440000 0.990000
$hbox 0 "Bip01 L Finger21" 0.000000 -0.640000 -0.710000 1.326317 0.460000 0.390000
$hbox 0 "Bip01 L Finger31" 0.000000 -0.650000 -0.460000 1.136843 0.510000 0.550000
$hbox 0 "Bone01" -6.130000 -18.070000 -3.160000 9.950000 4.580000 7.440000
$hbox 0 "Bone10" -2.385619 -8.638719 -2.637438 2.306428 0.000000 0.000000
$hbox 0 "blast_emitter" -5.000000 0.000000 -0.860000 5.020000 1.770000 3.770000
$hbox 0 "spinner" -3.520000 -3.290000 -3.510000 3.520000 0.060000 3.530000
$hbox 0 "Bone07" -0.060000 -1.550000 -0.030000 1.040000 0.000000 1.070000
$hbox 0 "Bone08" 0.000000 -1.410000 -0.010000 1.370000 0.000000 1.150000
$hbox 0 "Bone09" 0.000000 -1.090000 -0.170000 1.550000 0.000000 1.040000
// 9 animation sequence(s)
$sequence "idle1" "idle1" fps 30 
$sequence "idle2" "idle2" fps 30 
$sequence "spinup" "spinup" fps 30 { event 10010 15 } 
$sequence "spin" "spin" fps 30 loop 
$sequence "fire" "fire" fps 30 { event 10011 0 } 
$sequence "fire_solid" "fire_solid" fps 30 { event 10011 0 } 
$sequence "reload" "reload" fps 15 { event 5004 1 "weapons/displacer_reload.wav" } 
$sequence "draw" "draw" fps 15 
$sequence "holster" "holster" fps 25 { event 10011 0 } 
// End of QC script.
Добавлено 28-07-2019 в 22:09:
может редактировать их ?
Добавлено 28-07-2019 в 22:15:
Ku2zoff  думаешь прокатит такой способ за основу исходной пушки
__________________
Тихонов