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 сам стреляет но анимации выстрела так самого нет и звука выстрела нет уже целый день пытаюсь исправить данный баг никак не получается справиться с этой проблемой вот сам код дисплекера:
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 думаешь прокатит такой способ за основу исходной пушки
__________________
Тихонов