HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Винчестер (https://hlfx.ru/forum/showthread.php?threadid=947)
Отправлено NorthWanderer 19-10-2007 в 16:05:
Винчестер
здрасте товариши кодеры вот пробовал я написать код винчестера, так вот код я написал все скомпелил вроде ошибок нет но при вводе кода give weapon_winch иногда игра вылитает, и при перезарядки анимация WINCH_PUMP не проигровается вчем дело может кто подскажет ниже сам код и вставки в другие файлы:
winch.cpp
C++ Source Code:
1 | #define VECTOR_CONE_DM_SHOTGUN Vector( 0.08716, 0.04362, 0.00 )// 10 degrees by 5 degrees |
2 | #define VECTOR_CONE_DM_DOUBLESHOTGUN Vector( 0.17365, 0.04362, 0.00 ) // 20 degrees by 5 degree |
23 | LINK_ENTITY_TO_CLASS( weapon_winch, CWinch ); |
29 | SET_MODEL(ENT(pev), "models/w_winch.mdl"); |
31 | m_iDefaultAmmo = WINCH_DEFAULT_GIVE; |
33 | FallInit();// get ready to fall |
37 | void CWinch::Precache( void ) |
39 | PRECACHE_MODEL("models/v_winch.mdl"); |
40 | PRECACHE_MODEL("models/w_winch.mdl"); |
41 | PRECACHE_MODEL("models/p_winch.mdl"); |
43 | m_iShell = PRECACHE_MODEL ("models/shell.mdl");// shotgun shell |
45 | PRECACHE_SOUND("items/9mmclip1.wav"); |
47 | PRECACHE_SOUND ("weapons/dbarrel1.wav");//shotgun |
48 | PRECACHE_SOUND ("weapons/sbarrel1.wav");//shotgun |
50 | PRECACHE_SOUND ("weapons/reload1.wav"); // shotgun reload |
51 | PRECACHE_SOUND ("weapons/reload3.wav"); // shotgun reload |
53 | // PRECACHE_SOUND ("weapons/sshell1.wav"); // shotgun reload - played on client |
54 | // PRECACHE_SOUND ("weapons/sshell3.wav"); // shotgun reload - played on client |
56 | PRECACHE_SOUND ("weapons/357_cock1.wav"); // gun empty sound |
57 | PRECACHE_SOUND ("weapons/scock1.wav"); // cock gun |
59 | m_usWinchFire = PRECACHE_EVENT( 1, "events/winch.sc" ); |
62 | int CWinch::AddToPlayer( CBasePlayer *pPlayer ) |
64 | if ( CBasePlayerWeapon::AddToPlayer( pPlayer ) ) |
66 | MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev ); |
75 | int CWinch::GetItemInfo(ItemInfo *p) |
77 | p->pszName = STRING(pev->classname); |
79 | p->iMaxAmmo1 = _9MM_MAX_CARRY; |
82 | p->iMaxClip = WINCH_MAX_CLIP; |
86 | p->iId = m_iId = WEAPON_WINCH; |
87 | p->iWeight = WINCH_WEIGHT; |
96 | return DefaultDeploy( "models/v_winch.mdl", "models/p_winch.mdl", WINCH_DRAW, "winch" ); |
99 | //void CWinch::PrimaryAttack() |
101 | // // don't fire underwater |
102 | // if (m_pPlayer->pev->waterlevel == 3) |
104 | // PlayEmptySound( ); |
105 | // m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.15; |
113 | // PlayEmptySound( ); |
117 | // m_pPlayer->m_iWeaponVolume = LOUD_GUN_VOLUME; |
118 | // m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH; |
123 | //#if defined( CLIENT_WEAPONS ) |
124 | // flags = FEV_NOTHOST; |
130 | // m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH; |
132 | // Vector vecSrc = m_pPlayer->GetGunPosition( ); |
133 | // Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES ); |
138 | // if ( bIsMultiplayer() ) |
140 | // if ( g_pGameRules->IsMultiplayer() ) |
143 | // vecDir = m_pPlayer->FireBulletsPlayer( 4, vecSrc, vecAiming, VECTOR_CONE_DM_SHOTGUN, 2048, BULLET_PLAYER_9MM, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed ); |
147 | // // regular old, untouched spread. |
148 | // vecDir = m_pPlayer->FireBulletsPlayer( 6, vecSrc, vecAiming, VECTOR_CONE_10DEGREES, 2048, BULLET_PLAYER_9MM, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed ); |
151 | // PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usWinchFire, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0 ); |
154 | // if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) |
155 | // // HEV suit - indicate out of ammo condition |
156 | // m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); |
159 | // m_flPumpTime = gpGlobals->time + 0.5; |
161 | // m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.75; |
162 | // m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.75; |
164 | // m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 5.0; |
166 | // m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.75; |
167 | // m_fInSpecialReload = 0; |
170 | void CWinch::PrimaryAttack() |
172 | // don't fire underwater |
173 | if (m_pPlayer->pev->waterlevel == 3) |
176 | m_flNextPrimaryAttack = 0.15; |
186 | EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/357_cock1.wav", 0.8, ATTN_NORM); |
187 | m_flNextPrimaryAttack = 0.15; |
193 | m_pPlayer->m_iWeaponVolume = LOUD_GUN_VOLUME; |
194 | m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH; |
198 | m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH; |
200 | // player "shoot" animation |
201 | m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); |
204 | UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); |
206 | Vector vecSrc = m_pPlayer->GetGunPosition( ); |
207 | Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES ); |
210 | vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, VECTOR_CONE_1DEGREES, 8192, BULLET_PLAYER_9MM, 0, 0, m_pPlayer->pev, m_pPlayer->random_seed ); |
213 | #if defined( CLIENT_WEAPONS ) |
219 | PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usWinchFire, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0 ); |
221 | if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) |
222 | // HEV suit - indicate out of ammo condition |
223 | m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); |
225 | m_flNextPrimaryAttack = 0.75; |
226 | m_flTimeWeaponIdle = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); |
230 | void CWinch::SecondaryAttack( void ) |
236 | void CWinch::Reload( void ) |
238 | if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 || m_iClip == WINCH_MAX_CLIP) |
241 | // don't reload until recoil is done |
242 | if (m_flNextPrimaryAttack > UTIL_WeaponTimeBase()) |
245 | // check to see if we're ready to reload |
246 | if (m_fInSpecialReload == 0) |
248 | SendWeaponAnim( WINCH_START_RELOAD ); |
249 | m_fInSpecialReload = 1; |
250 | m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.6; |
251 | m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.6; |
252 | m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 1.0; |
253 | m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 1.0; |
256 | else if (m_fInSpecialReload == 1) |
258 | if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase()) |
260 | // was waiting for gun to move to side |
261 | m_fInSpecialReload = 2; |
263 | if (RANDOM_LONG(0,1)) |
264 | EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/reload1.wav", 1, ATTN_NORM, 0, 85 + RANDOM_LONG(0,0x1f)); |
266 | EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/reload3.wav", 1, ATTN_NORM, 0, 85 + RANDOM_LONG(0,0x1f)); |
268 | SendWeaponAnim( WINCH_RELOAD ); |
270 | m_flNextReload = UTIL_WeaponTimeBase() + 0.5; |
271 | m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5; |
275 | // Add them to the clip |
277 | m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= 1; |
278 | m_fInSpecialReload = 1; |
283 | void CWinch::WeaponIdle( void ) |
287 | m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES ); |
289 | if ( m_flPumpTime && m_flPumpTime < gpGlobals->time ) |
291 | // play pumping sound |
292 | EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/scock1.wav", 1, ATTN_NORM, 0, 95 + RANDOM_LONG(0,0x1f)); |
296 | if (m_flTimeWeaponIdle < UTIL_WeaponTimeBase() ) |
298 | if (m_iClip == 0 && m_fInSpecialReload == 0 && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) |
302 | else if (m_fInSpecialReload != 0) |
304 | if (m_iClip != 8 && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) |
310 | // reload debounce has timed out |
311 | SendWeaponAnim( WINCH_PUMP ); |
313 | // play cocking sound |
314 | EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/scock1.wav", 1, ATTN_NORM, 0, 95 + RANDOM_LONG(0,0x1f)); |
315 | m_fInSpecialReload = 0; |
316 | m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.5; |
322 | float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 0, 1 ); |
326 | m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + (60.0/12.0);// * RANDOM_LONG(2, 5); |
328 | SendWeaponAnim( iAnim ); |
335 | class CWinchAmmoClip : public CBasePlayerAmmo |
340 | SET_MODEL(ENT(pev), "models/w_9mmARclip.mdl"); |
341 | CBasePlayerAmmo::Spawn( ); |
343 | void Precache( void ) |
345 | PRECACHE_MODEL ("models/w_9mmARclip.mdl"); |
346 | PRECACHE_SOUND("items/9mmclip1.wav"); |
348 | BOOL AddAmmo( CBaseEntity *pOther ) |
350 | int bResult = (pOther->GiveAmmo( AMMO_WINCHCLIP_GIVE, "9mm", _9MM_MAX_CARRY) != -1); |
353 | EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM); |
358 | LINK_ENTITY_TO_CLASS( ammo_winchclip, CWinchAmmoClip ); |
ниже класс в weapon.h
C++ Source Code:
1 | class CWinch : public CBasePlayerWeapon |
6 | // int Save( CSave &save ); |
7 | // int Restore( CRestore &restore ); |
8 | // static TYPEDESCRIPTION m_SaveData[]; |
13 | void Precache( void ); |
14 | int iItemSlot( ) { return 3; } |
15 | int GetItemInfo(ItemInfo *p); |
16 | int AddToPlayer( CBasePlayer *pPlayer ); |
18 | void PrimaryAttack( void ); |
19 | void SecondaryAttack( void ); |
22 | void WeaponIdle( void ); |
27 | virtual BOOL UseDecrement( void ) |
29 | #if defined( CLIENT_WEAPONS ) |
37 | unsigned short m_usWinchFire; |
на клиенте ev_hldm.cpp
C++ Source Code:
1 | //====================== |
3 | //====================== |
4 | void EV_FireWinch( event_args_t *args ) |
14 | vec3_t vecSrc, vecAiming; |
16 | vec3_t up, right, forward; |
17 | float flSpread = 0.01; |
20 | VectorCopy( args->origin, origin ); |
21 | VectorCopy( args->angles, angles ); |
22 | VectorCopy( args->velocity, velocity ); |
24 | AngleVectors( angles, forward, right, up ); |
26 | shell = gEngfuncs.pEventAPI->EV_FindModelIndex ("models/shell.mdl");// brass shell |
28 | if ( EV_IsLocal( idx ) ) |
30 | // Add muzzle flash to current weapon model |
32 | gEngfuncs.pEventAPI->EV_WeaponAnimation( WINCH_FIRE, 2 ); |
34 | V_PunchAxis( 0, -5.0 ); |
37 | EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 32, -12, 6 ); |
39 | EV_EjectBrass ( ShellOrigin, ShellVelocity, angles[ YAW ], shell, TE_BOUNCE_SHOTSHELL ); |
41 | gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/sbarrel1.wav", gEngfuncs.pfnRandomFloat(0.95, 1.0), ATTN_NORM, 0, 93 + gEngfuncs.pfnRandomLong( 0, 0x1f ) ); |
43 | EV_GetGunPosition( args, vecSrc, origin ); |
44 | EV_HLDM_MuzzleFlash( vecSrc, 2.5 + gEngfuncs.pfnRandomFloat( -0.2, 0.2 ) ); |
46 | VectorCopy( forward, vecAiming ); |
48 | if ( gEngfuncs.GetMaxClients() > 1 ) |
50 | EV_HLDM_FireBullets( idx, forward, right, up, 4, vecSrc, vecAiming, 2048, BULLET_PLAYER_9MM, 0, &tracerCount[idx-1], 0.08716, 0.04362 ); |
54 | EV_HLDM_FireBullets( idx, forward, right, up, 6, vecSrc, vecAiming, 2048, BULLET_PLAYER_9MM, 0, &tracerCount[idx-1], 0.08716, 0.08716 ); |
57 | //====================== |
59 | //====================== |
ну вроде все вписал где можно совершитть ошибку
Отправлено FiEctro 19-10-2007 в 16:16:
NorthWanderer его по моему еще в player.cpp
Там что то типа GiveNamedItem( "weapon_winch" );
прописать нада ...
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено NorthWanderer 19-10-2007 в 16:32:
там я прописал.
у меня вылетает тоже после того как я ввожу impulse 101
и give weapon_winch но не всегда вчем проблема не знаю
да и еше винчестер мажет это наверное осталось от дробовика
Отправлено ToMMuK 19-10-2007 в 16:51:
C++ Source Code:
#define VECTOR_CONE_DM_SHOTGUN Vector( 0.08716, 0.04362, 0.00 )// 10 degrees by 5 degrees |
#define VECTOR_CONE_DM_DOUBLESHOTGUN Vector( 0.17365, 0.04362, 0.00 ) // 20 degrees by 5 degree |
Этим помойму задаётся точность 
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено NorthWanderer 19-10-2007 в 17:12:
а я то думал для чего эти строчки
Добавлено 19-10-2007 в 23:12:
хотя ствол не мажет мажет декаль которая ресуется на стине
Отправлено ToMMuK 19-10-2007 в 19:51:
Где-то в PrimaryAttack посмотри 
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено Тренсфер 20-10-2007 в 05:46:
А мне две последние цифры в EV_HLDM_FireBullets не нравятся.
Внутри EV_HLDM_FireBullets и рисуются декали.
Если делаешь что-то наподобие дробовика тебе прийдётся рандомизировать попадения пули в void EV_HLDM_FireBullets...
Добавлено 20-10-2007 в 09:46:
Да, последние два параметра в EV_HLDM_FireBullets означают "распостронение" по оси х и по оси у.
__________________
Хотелось бы, чтобы не только хотелось...