HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Help (https://hlfx.ru/forum/showthread.php?threadid=2040)
Отправлено MadKing 28-12-2009 в 02:31:
Help
Всем хай, давно у вас не писал...
Я тут делаю М16... всё работает отлично, но у меня глюки с глушителем(моделька из CSCZ) в сервере у меня там на этот счёт все правильно написано, за это я ручаюсь (переменная для глушака - int Silincer - правдо она, если мне не изменяет память, приватная) а вот на клиенте я вообще не упоминал про глушитель, вопрос - как это там "упоминуть"?
И можно ли там использовать Silincer???
Отправлено XaeroX 28-12-2009 в 04:58:
Не знаю, как ты делал код, но если как в СДК 2.3, то инфу о глушителе на клиент надо передавать. Скажем, через параметр евента.
__________________
Отправлено Дядя Миша 28-12-2009 в 07:43:
MadKing глушитель - чисто серверная фишка.
На клиент надо передавать разве что изменившийся боди вьюмодели.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 28-12-2009 в 08:58:
Дядя Миша надо передавать инфу о факте наличия глушителя - чтобы играть звуки другие, например, и чтобы муззлфлеш не рисовать.
__________________
Отправлено MadKing 28-12-2009 в 09:08:
XaeroX спасибо, но тыж знаешь шо я не очень силён в кодинге и то шо для профи кажется обычным делом для меня -
по этому прошу написать какие именно команды надо писать и с каким синтаксисом
Буду преблагодарен!

Отправлено Дядя Миша 28-12-2009 в 09:57:
XaeroX так это на сервере все делается.
Глушак в первую очередь должен быть виден другим игрокам - отсюда и яркость вспышки и громкость звука - погляди недописанный код в glock.cpp
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 28-12-2009 в 11:14:
Дядя Миша все прекрасно будет видно другим игрокам. Через евенты. Не парь мне мозг.
__________________
Отправлено Дядя Миша 28-12-2009 в 12:06:
XaeroX нефиг парить мозг этими эвентами - и без них все прекрасно фурычит.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено MadKing 29-12-2009 в 02:13:
Дядя Миша не фурычит, в том то и дело...
Вот код:
C++ Source Code:
1 | #if !defined( OEM_BUILD ) && !defined( HLDEMO_BUILD ) |
27 | LINK_ENTITY_TO_CLASS( weapon_m16, CM16 ); |
28 | LINK_ENTITY_TO_CLASS( weapon_m16a2, CM16 ); |
29 | LINK_ENTITY_TO_CLASS( weapon_m4a1, CM16 ); |
31 | int CM16::GetItemInfo(ItemInfo *p) |
33 | p->pszName = STRING(pev->classname); |
35 | p->iMaxAmmo1 = _556_MAX_CARRY; |
38 | p->iMaxClip = M16_MAX_CLIP; |
42 | p->iId = m_iId = WEAPON_M16; |
43 | p->iWeight = M16_WEIGHT; |
48 | int CM16::AddToPlayer( CBasePlayer *pPlayer ) |
50 | if ( CBasePlayerWeapon::AddToPlayer( pPlayer ) ) |
52 | MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev ); |
62 | pev->classname = MAKE_STRING("weapon_m16"); // hack to allow for old names |
65 | SET_MODEL(ENT(pev), "models/w_m16.mdl"); |
66 | m_iDefaultAmmo = M16_DEFAULT_GIVE; |
67 | FallInit();// get ready to fall down. |
71 | void CM16::Precache( void ) |
73 | PRECACHE_MODEL("models/v_m16.mdl"); |
74 | PRECACHE_MODEL("models/w_m16.mdl"); |
75 | PRECACHE_MODEL("models/p_m16.mdl"); |
77 | PRECACHE_SOUND("items/9mmclip1.wav"); |
78 | PRECACHE_SOUND ("weapons/357_cock1.wav"); |
79 | PRECACHE_SOUND ("weapons/m16-1.wav"); |
80 | PRECACHE_SOUND ("weapons/m16_unsil-2.wav"); |
81 | PRECACHE_SOUND ("weapons/m16_unsil-1.wav"); |
84 | m_iShell = PRECACHE_MODEL ("models/saw_shell.mdl"); |
85 | m_usFireM16 = PRECACHE_EVENT( 1, "events/m16.sc" ); |
91 | return DefaultDeploy( "models/v_m16.mdl", "models/p_m16.mdl", M16_DRAW, "M16", UseDecrement(), pev->body ); |
93 | return DefaultDeploy( "models/v_m16.mdl", "models/p_m16.mdl", M16_DRAW_S, "M16", UseDecrement(), pev->body ); |
97 | void CM16::Holster( int skiplocal /* = 0 */ ) |
99 | m_fInReload = FALSE;// cancel any reload in progress. |
100 | m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0; |
101 | m_flTimeWeaponIdle = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); |
102 | //SendWeaponAnim( M16_HOLSTER ); |
105 | void CM16::PrimaryAttack() |
113 | EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/357_cock1.wav", 0.8, ATTN_NORM); |
114 | m_flNextPrimaryAttack = 0.2; |
119 | if ((Spread<0.06)&&((gpGlobals->time - lastshottime)<2)) |
121 | lastshottime = gpGlobals->time; |
122 | if(!Silincer) Spread+=0.005;//Increase the shotcone |
123 | else Spread+=0.003;//With silencer we have less spread |
127 | lastshottime = gpGlobals->time; |
128 | Spread=0.01;//First shot have to be perfect |
130 | //vect_ = Vector(Spread,Spread,Spread); |
132 | if (!Silincer)//No silincer |
134 | m_pPlayer->m_iWeaponVolume = LOUD_GUN_VOLUME; |
135 | m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH; |
136 | m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH; |
140 | m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME; |
141 | m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH; |
142 | // m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH; |
146 | // player "shoot" animation |
147 | m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); |
148 | //UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); |
149 | Vector vecSrc = m_pPlayer->GetGunPosition( ); |
150 | Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES ); |
152 | vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, Vector(Spread,Spread,Spread), 8192, BULLET_PLAYER_M16, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed ); |
154 | #if defined( CLIENT_WEAPONS ) |
159 | //Shells and Links for M16 gun |
160 | #if defined( OLD_WEAPONS ) |
161 | Vector vecShellVelocity = m_pPlayer->pev->velocity + gpGlobals->v_right * RANDOM_FLOAT(50,70) + gpGlobals->v_up * RANDOM_FLOAT(100,150) + gpGlobals->v_forward * 25; |
162 | EjectBrass ( pev->origin + m_pPlayer->pev->view_ofs + gpGlobals->v_up * -12 + gpGlobals->v_forward * 32 + gpGlobals->v_right * 6 , vecShellVelocity, pev->angles.y, m_iShell, TE_BOUNCE_SHELL ); |
166 | PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usFireM16, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0 ); |
168 | if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) |
169 | // HEV suit - indicate out of ammo condition |
170 | m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); |
172 | m_flNextPrimaryAttack = 0.10; |
173 | m_flTimeWeaponIdle = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); |
176 | void CM16::SecondaryAttack() |
180 | SendWeaponAnim( M16_ATTACH ); |
185 | SendWeaponAnim( M16_DETACH ); |
188 | m_flNextPrimaryAttack = 0.8; |
191 | void CM16::Reload( void ) |
193 | if ( m_pPlayer->ammo_556 <= 0 ) |
195 | if ( m_pPlayer->pev->fov != 0 ) |
197 | m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 0; // 0 means reset to default fov |
201 | if (DefaultReload( 30, M16_RELOAD, 2.0, 0 )) |
203 | SendWeaponAnim( M16_RELOAD ); |
204 | m_flSoundDelay = 1.5; |
209 | if (DefaultReload( 30, M16_RELOAD_S, 2.0, 0 )) |
211 | SendWeaponAnim( M16_RELOAD_S ); |
212 | m_flSoundDelay = 1.5; |
218 | void CM16::WeaponIdle( void ) |
221 | m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES ); |
222 | // ALERT( at_console, "%.2f\n", gpGlobals->time - m_flSoundDelay ); |
223 | if (m_flSoundDelay != 0 && m_flSoundDelay <= UTIL_WeaponTimeBase() ) |
225 | EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/762_reload2.wav", RANDOM_FLOAT(0.8, 0.9), ATTN_NORM); |
228 | if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase() ) |
231 | m_flTimeWeaponIdle = (60.0/30.0); |
232 | if (!Silincer) SendWeaponAnim( M16_IDLE, UseDecrement() ? 1 : 0, 0 ); |
233 | else SendWeaponAnim( M16_IDLE_S, UseDecrement() ? 1 : 0, 0 ); |
234 | if (Spread>0) Spread-=0.01; |
Не пугайтесь, лучше изучите...
Меня там немного смущает SecondaryAttack своей простотой, но ничего более рабатющего я так и не придумал....
Кста, прошу обратить внимание на мой Spread - всё придумал сам, без туторов, можно по этому М16 статью про спрэд написать...
Всё со спрэдом работает превосходно, при стрельбе увеличение конуса зависит еще и от наличия глушителя... Один минус, или просто особенность -
- я не стал делать два вида пуль - запарно больно было
Отправлено XaeroX 29-12-2009 в 07:56:
Ты объясни нам русским ртом - что у тебя конкретно не фурычит?
Добавлено 29-12-2009 в 13:56:
Со spread-ом - молодец 
__________________
Отправлено Дядя Миша 29-12-2009 в 08:22:
MadKing дать бы тебе плюсов за оверквотинг, но раз уж сам spread придумал - не буду.
Насчет того, что у тебя там шо-то неработает - это есть ваши смешные фантазии, я в первом ксаш делал именно такой глок с глушителем и все превосходно работало.
Вот его код
C++ Source Code:
1 | void CGlock::SecondaryAttack( void ) |
5 | SendWeaponAnim( GLOCK_HOLSTER2); |
7 | SetThink (AddSilencer); |
12 | SendWeaponAnim( GLOCK_DEL_SILENCER); |
14 | SetThink (AddSilencer); |
17 | m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 4.5; |
18 | m_flNextSecondaryAttack = m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 4.0; |
21 | void CGlock::AddSilencer( void ) |
25 | SendWeaponAnim( GLOCK_ADD_SILENCER ); |
30 | { SendWeaponAnim( GLOCK_DRAW ); |
36 | void CGlock:: PrimaryAttack( void ) |
38 | if ( m_iClip && m_pPlayer->pev->waterlevel != 3)//don't fire underwater |
40 | // player "shoot" animation |
41 | m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); |
46 | m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME; |
47 | m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH; |
52 | m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; |
53 | m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH; |
58 | Vector vecSrc = m_pPlayer->GetGunPosition( ); |
61 | vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES ); |
64 | vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, Vector( 0.02, 0.02, 0.02 ), 8192, BULLET_PLAYER_9MM, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed ); |
66 | PLAYBACK_EVENT_FULL( 0, m_pPlayer->edict(), m_usFireGlock, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, ( m_iClip == 0 ) ? 1 : 0, pev->body ); |
68 | m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.35; |
69 | m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT ( 10, 15 ); |
74 | m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.7; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено MadKing 30-12-2009 в 02:05:
XaeroX, всё отлично работает кроме глушака, стреляешь когда - он сам меняет себе глушак - как то стрелял без глушака - бах - и он появился, стреляю с глушаком - всё отлично - с глушаком.
Дядя Миша, чё за think`и?
Чё это за фень? Она мне поможет, как ты думаешь??? у меня её нед.....

Добавлено 30-12-2009 в 05:05:
Кста, я у себя одну ошибочку нашёл в Секондари....
Цитата:
MadKing писал:
m_flNextPrimaryAttack = 0.8;
,,
Я забыл gpGlobals->time+
Дядя Миша , а как у тебя с cl_dll? там то как? (Меня интересует EV_Fire...)?
Отправлено Дядя Миша 30-12-2009 в 09:41:
MadKing анимации надевания и снятия глушителя.
ну вот эвент с клиента
C++ Source Code:
1 | void EV_FireGlock( event_args_t *args ) |
12 | vec3_t vecSrc, vecAiming; |
13 | vec3_t up, right, forward; |
16 | VectorCopy( args->origin, origin ); |
17 | VectorCopy( args->angles, angles ); |
18 | VectorCopy( args->velocity, velocity ); |
20 | empty = args->bparam1; |
21 | AngleVectors( angles, forward, right, up ); |
23 | shell = gEngfuncs.pEventAPI->EV_FindModelIndex ("models/shell.mdl");// brass shell |
25 | if ( EV_IsLocal( idx ) ) |
27 | cl_entity_s *view = gEngfuncs.GetViewModel(); |
28 | gEngfuncs.pEventAPI->EV_WeaponAnimation( empty ? 4 : 3, args->bparam2 );//3 - is GLOCK_SHOOT animation |
29 | EV_MuzzleFlash(); //4 - is GLOCK_SHOOT_EMPTY |
30 | if(args->bparam2)//silence mode |
31 | gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&view->attachment[1], 17 ); |
33 | gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&view->attachment[0], 11 ); |
34 | V_PunchAxis( 0, -2.0 ); |
37 | EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 20, -12, 4 ); |
39 | EV_EjectBrass ( ShellOrigin, ShellVelocity, angles[ YAW ], shell, TE_BOUNCE_SHELL ); |
43 | switch( gEngfuncs.pfnRandomLong( 0, 1 ) ) |
46 | gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/pl_gun1.wav", gEngfuncs.pfnRandomFloat(0.92, 1.0), ATTN_NORM, 0, 98 + gEngfuncs.pfnRandomLong( 0, 2 ) ); |
49 | gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/pl_gun2.wav", gEngfuncs.pfnRandomFloat(0.92, 1.0), ATTN_NORM, 0, 98 + gEngfuncs.pfnRandomLong( 0, 2 ) ); |
54 | gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/pl_gun3.wav", gEngfuncs.pfnRandomFloat(0.92, 1.0), ATTN_NORM, 0, 98 + gEngfuncs.pfnRandomLong( 0, 3 ) ); |
56 | EV_GetGunPosition( args, vecSrc, origin ); |
58 | VectorCopy( forward, vecAiming ); |
60 | EV_HLDM_FireBullets( idx, forward, right, up, 1, vecSrc, vecAiming, 8192, BULLET_PLAYER_9MM, 0, 0, args->fparam1, args->fparam2 ); |
Добавлено 30-12-2009 в 12:41:
Кстати. Вся эта хрень должна быть в спирите 1.7
Не парьте мне мозг.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено MadKing 31-12-2009 в 02:44:
Цитата:
Дядя Миша писал:
if ( EV_IsLocal( idx ) )
{
cl_entity_s *view = gEngfuncs.GetViewModel();
gEngfuncs.pEventAPI->EV_WeaponAnimation( empty ? 4 : 3, args->bparam2 );//3 - is GLOCK_SHOOT animation
EV_MuzzleFlash();//4 - is GLOCK_SHOOT_EMPTY
if(args->bparam2)//silence mode
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&view->attachment[1], 17 );
else//normal flash
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&view->attachment[0], 11 );
V_PunchAxis( 0, -2.0 );
}
Как я понимаю, весь прикол в этих строчках?
Попробуем....
Добавлено 31-12-2009 в 05:44:
C:\HLSDK\MaxLife\cl_dll\ev_hldm.cpp(1462) : error C2065: 'empty' : undeclared identifier
Отправлено XaeroX 31-12-2009 в 06:55:
Цитата:
MadKing писал:
Как я понимаю, весь прикол в этих строчках?
Цитата:
MadKing писал:
error C2065: 'empty' : undeclared identifier

__________________