fire64 Житель форума  
	
Дата регистрации : Apr 2007Проживает : МоскваСообщений : 2362Рейтинг 
[кратко] 
Пользователи: 6.9 (18 )  
Нарушения: -8.4 (? )  
Сообщения: 0.2  (Метки )  
Регистрация: 9.6  
 
 
 
 
	
	 глюки оружия, если на сервере играет больше одного игрока  
	Здравствуйте, у меня проблемы с дисплейсером.C++ Source Code: 
12 #define 	SF_DISP_MODE	128 //G-Cont. use for makes alternative displacer - debug features 
26 LINK_ENTITY_TO_CLASS( weapon_displacer, CDisplacer ); 
28 #define  DISPLACER_SECONDARY_USAGE 2
29 #define  DISPLACER_PRIMARY_USAGE 1
31 LINK_ENTITY_TO_CLASS( info_xen, CPointEntity ); 
32 LINK_ENTITY_TO_CLASS( info_earth, CPointEntity ); 
34 // displacer teleball code 
36 class  CDispBall : public  CBaseEntity//Special for Ghoul [BB] 
40   void  Precache( void  ); 
41   void  Explode( TraceResult *pTrace ); 
42   void  RemoveBall (void ); 
43   void  SelfRemove( void  ); 
44   void  EXPORT ExplodeTouch( CBaseEntity *pOther ); 
46   void  EXPORT BallThink( void  ); 
47   static  CDispBall *CreateDispBall( Vector vecOrigin, Vector vecAngles, CBaseEntity *pOwner, CDisplacer *pLauncher ); 
48   static  CDispBall *SelfCreate( void  ); 
50   BOOL m_fIsSelfTeleporter; 
55 LINK_ENTITY_TO_CLASS( dispball, CDispBall ); 
57 CDispBall *CDispBall::CreateDispBall( Vector vecOrigin, Vector vecAngles, CBaseEntity *pOwner, CDisplacer *pLauncher ) 
59   CDispBall *pDispBall = GetClassPtr( (CDispBall *)NULL ); 
61   UTIL_SetOrigin( pDispBall->pev, vecOrigin ); 
62   pDispBall->pev->angles = vecAngles; 
63   pDispBall->m_fIsSelfTeleporter = FALSE; 
65   pDispBall->SetTouch( CDispBall::ExplodeTouch ); 
66   pDispBall->pev->owner = pOwner->edict(); 
73 CDispBall *CDispBall::SelfCreate( void  ) 
75   CDispBall *pDispBall = GetClassPtr( (CDispBall *)NULL ); 
76   pDispBall->pev->classname = MAKE_STRING("displacer_ball" ); 
77   pDispBall->m_fIsSelfTeleporter = TRUE; 
79   pDispBall->SelfRemove(); 
87 void  CDispBall :: Spawn( void  )
93   if  ( !m_fIsSelfTeleporter ) 
95     pev->movetype = MOVETYPE_FLY; 
96     pev->solid = SOLID_BBOX; 
97     pev->velocity = gpGlobals->v_forward * 500; 
100   SET_MODEL(ENT(pev), "sprites/unused_spark2.spr" ); 
103   UTIL_SetSize(pev, Vector ( 0, 0, 0 ), Vector ( 0, 0, 0 ) ); 
104   UTIL_SetOrigin( pev, pev->origin ); 
105   pev->rendermode = kRenderTransAdd; 
106   pev->renderamt = 255; 
108   pev->classname = MAKE_STRING("dispball" ); 
110   if  ( !m_fIsSelfTeleporter ) 
113     SetThink( BallThink ); 
114     SetTouch( ExplodeTouch ); 
115     pev->nextthink = 0.1; 
120   UTIL_MakeVectors( pev->angles ); 
121   pev->angles.x = -(pev->angles.x + 0); 
126 void  CDispBall :: Precache( void  )
128   PRECACHE_MODEL("sprites/unused_spark2.spr" ); 
129   PRECACHE_MODEL ("sprites/xflare2.spr" ); 
131   PRECACHE_SOUND("weapons/newflashbang_explode.wav" ); 
132   m_iDispRing = PRECACHE_MODEL ("sprites/bluejet1.spr" ); 
135 void  CDispBall :: BallThink( void  )
142   for  (int  i = 0; i < 10; i++) 
144     Vector vecDir = Vector( RANDOM_FLOAT( -1.0, 1.0 ), RANDOM_FLOAT( -1.0, 1.0 ),RANDOM_FLOAT( -1.0, 1.0 ) ); 
145     vecDir = vecDir.Normalize(); 
147     UTIL_TraceLine( pev->origin, pev->origin + vecDir * 1024, ignore_monsters, ENT(pev), &tr1 ); 
148     if  (flDist > tr1.flFraction) 
151       flDist = tr.flFraction; 
155   if  ( flDist == 1.0 ) return ; 
157   pBeam = CBeam::BeamCreate("sprites/xflare2.spr" ,200); 
158   pBeam->PointEntInit( tr.vecEndPos, entindex() ); 
159   pBeam->SetStartPos( tr.vecEndPos ); 
160   pBeam->SetEndEntity( entindex() ); 
161   pBeam->SetColor( 90, 170, 16 ); 
162   pBeam->SetNoise( 65 ); 
163   pBeam->SetBrightness( 255 ); 
164   pBeam->SetWidth( 30 ); 
165   pBeam->SetScrollRate( 35 ); 
166   pBeam->LiveForTime( 1 ); 
168   pev->frame += 1; //animate teleball  
170     pev->frame = fmod( pev->frame, 24 ); 
172   pev->nextthink = gpGlobals->time + 0.1; 
176 void  CDispBall :: SelfRemove ( void  )
178   pev->velocity = g_vecZero; 
180   MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); 
181   WRITE_BYTE( TE_BEAMCYLINDER ); 
182   WRITE_COORD( pev->origin.x); 
183   WRITE_COORD( pev->origin.y); 
184   WRITE_COORD( pev->origin.z); 
185   WRITE_COORD( pev->origin.x); 
186   WRITE_COORD( pev->origin.y); 
187   WRITE_COORD( pev->origin.z + 640); 
188   WRITE_SHORT( m_iDispRing ); 
189   WRITE_BYTE( 0 );	// startframe  
190   WRITE_BYTE( 10 );	// framerate  
191   WRITE_BYTE( 3 );	// life  
192   WRITE_BYTE( 20 );	// width  
193   WRITE_BYTE( 0 );	// noise  
194   WRITE_BYTE( 255 );	// r, g, b  
195   WRITE_BYTE( 255 );	// r, g, b  
196   WRITE_BYTE( 255 );	// r, g, b  
197   WRITE_BYTE( 255 );	// brightness  
198   WRITE_BYTE( 0 );	// speed  
201   MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); 
202   WRITE_BYTE(TE_DLIGHT); 
203   WRITE_COORD(pev->origin.x);	// X  
204   WRITE_COORD(pev->origin.y);	// Y  
205   WRITE_COORD(pev->origin.z);	// Z  
206   WRITE_BYTE( 32 );		// radius * 0.1  
207   WRITE_BYTE( 255 );		// r  
208   WRITE_BYTE( 180 );		// g  
209   WRITE_BYTE( 96 );		// b  
210   WRITE_BYTE( 60 );		// time * 10  
211   WRITE_BYTE( 20 );		// decay * 0.1  
214   SetThink (RemoveBall); 
216   pev->nextthink = gpGlobals->time + 0.3; 
219 void  CDispBall::ExplodeTouch( CBaseEntity *pOther )
222   Vector		vecSpot;// trace starts here!  
224   pev->enemy = pOther->edict(); 
226   vecSpot = pev->origin - pev->velocity.Normalize() * 32; 
227   UTIL_TraceLine( vecSpot, vecSpot + pev->velocity.Normalize() * 64, dont_ignore_monsters, ENT(pev), &tr ); 
232 void  CDispBall::Explode( TraceResult *pTrace )
234   if (!LockRing)//for partially fix strange bug in HL engine (for full fix teleball MUST be moved to client side). g-cont  
236     MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); 
237     WRITE_BYTE( TE_BEAMCYLINDER ); 
238     WRITE_COORD( pev->origin.x); 
239     WRITE_COORD( pev->origin.y); 
240     WRITE_COORD( pev->origin.z); 
241     WRITE_COORD( pev->origin.x); 
242     WRITE_COORD( pev->origin.y); 
243     WRITE_COORD( pev->origin.z + 800); 
244     WRITE_SHORT( m_iDispRing ); 
245     WRITE_BYTE( 0 ); // startframe  
246     WRITE_BYTE( 10 ); // framerate  
247     WRITE_BYTE( 3 ); // life  
248     WRITE_BYTE( 20 );  // width  
249     WRITE_BYTE( 0 );   // noise  
250     WRITE_BYTE( 255 );   // r, g, b  
251     WRITE_BYTE( 255 );   // r, g, b  
252     WRITE_BYTE( 255 );   // r, g, b  
253     WRITE_BYTE( 255 ); //brightness  
254     WRITE_BYTE( 0 );		// speed  
257     MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); 
258     WRITE_BYTE(TE_DLIGHT); 
259     WRITE_COORD(pev->origin.x);	// X  
260     WRITE_COORD(pev->origin.y);	// Y  
261     WRITE_COORD(pev->origin.z);	// Z  
262     WRITE_BYTE( 8 );		// radius * 0.1  
263     WRITE_BYTE( 243 );		// r  
264     WRITE_BYTE( 231 );		// g  
265     WRITE_BYTE( 16 );		// b  
266     WRITE_BYTE( 20 );		// time * 10  
267     WRITE_BYTE( 0 );		// decay * 0.1  
270     MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); 
271     WRITE_BYTE(TE_DLIGHT); 
272     WRITE_COORD(pev->origin.x);	// X  
273     WRITE_COORD(pev->origin.y);	// Y  
274     WRITE_COORD(pev->origin.z);	// Z  
275     WRITE_BYTE( 4 );		// radius * 0.1  
276     WRITE_BYTE( 240 );		// r  
277     WRITE_BYTE( 140 );		// g  
278     WRITE_BYTE( 12 );		// b  
279     WRITE_BYTE( 20 );		// time * 10  
280     WRITE_BYTE( 0 );		// decay * 0.1  
285   pev->velocity = g_vecZero; 
287   SetThink (RemoveBall); 
288   pev->nextthink = gpGlobals->time + 0.6; 
292 void  CDispBall::RemoveBall( void  )
294   EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/newflashbang_explode.wav" , 0.9, ATTN_NORM); 
295   pev->effects |= EF_NODRAW; 
299     pevOwner = VARS( pev->owner ); 
305   ::RadiusDamage( pev->origin, pev, pevOwner, pev->dmg, 200, CLASS_NONE, DMG_ENERGYBEAM ); 
308 //----------------------- 
310 //----------------------- 
312 void  CDisplacer::Spawn( )
315   m_iId = WEAPON_DISPLACER; 
316   SET_MODEL(ENT(pev), "models/w_egon.mdl" ); 
319   FallInit();// get ready to fall down.  
322 int  CDisplacer::AddToPlayer( CBasePlayer *pPlayer )
324   if  ( CBasePlayerWeapon::AddToPlayer( pPlayer ) ) 
326     MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev ); 
334 BOOL CDisplacer::Deploy( void  ) 
336   return  DefaultDeploy( "models/v_BFG.mdl" , "models/p_BFG.mdl" , DISPLACER_DRAW, "gauss"  ); 
339 void  CDisplacer::Holster( int  skiplocal )
341   m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.1; 
342   SendWeaponAnim( DISPLACER_HOLSTER ); 
345 int  CDisplacer::GetItemInfo(ItemInfo *p)
347   p->pszName = STRING(pev->classname); 
349   p->iMaxAmmo1 = _9MM_MAX_CARRY; 
352   p->iMaxClip = WEAPON_NOCLIP; 
356   p->iId = m_iId = WEAPON_DISPLACER; 
357   p->iWeight = DISPLACER_WEIGHT; 
362 void  CDisplacer::Precache( void  )
364   PRECACHE_MODEL("models/w_egon.mdl" ); 
365   PRECACHE_MODEL("models/v_BFG.mdl" ); 
366   PRECACHE_MODEL("models/p_BFG.mdl" ); 
368   PRECACHE_SOUND("weapons/gluongun_fire.wav" ); 
369   PRECACHE_SOUND ("buttons/button10.wav" ); 
370   PRECACHE_SOUND ("weapons/tu_fire_missile.wav" ); 
372   UTIL_PrecacheOther( "dispball"  ); 
374   m_iBeam = PRECACHE_MODEL("sprites/xflare2.spr" ); 
375   m_usDisplacer = PRECACHE_EVENT( 1, "events/crossbow2.sc"  ); 
378 void  CDisplacer::SpinUp ( void  )
383   if  (!m_iAttackMode) SetThink (CDisplacer::Fire); 
384   else  SetThink (CDisplacer::Teleport); 
387   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); 
389   pev->nextthink = gpGlobals->time + 0.1; 
390   m_flTimeWeaponIdle = gpGlobals->time + 1.15; 
394 void  CDisplacer::PrimaryAttack( void  )
396   if  (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] < 1)//Check for ammo  
398     EMIT_SOUND( edict(), CHAN_BODY, "buttons/button10.wav" , 1, ATTN_NORM ); 
399     m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.1; 
403   m_iAttackMode = FALSE; //We set attack mode in first mode  
405   SetThink (CDisplacer::SpinUp); 
407   m_flNextPrimaryAttack = gpGlobals->time + 0.1; 
408   m_flTimeWeaponIdle = gpGlobals->time + 1.5; 
409   pev->nextthink = gpGlobals->time + 0.1; 
412 void  CDisplacer::SecondaryAttack ( void  )
414   if  (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] < 2) 
416     EMIT_SOUND( edict(), CHAN_BODY, "buttons/button10.wav" , 1, ATTN_NORM ); 
417     m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.1; 
421   if  (m_iAttackMode) return ; 
422   m_iAttackMode = TRUE; //We set attack mode in second mode  
424   SetThink (CDisplacer::SpinUp); 
426   m_flNextSecondaryAttack = gpGlobals->time + 4.0; 
427   m_flTimeWeaponIdle = gpGlobals->time + 1.5; 
428   pev->nextthink = gpGlobals->time + 0.1; 
431 void  CDisplacer::Fire (void )
433   SendWeaponAnim( DISPLACER_FIRE ); 
434   m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); 
436   Vector vecSrc = m_pPlayer->GetGunPosition( ) + gpGlobals->v_forward * 16 + gpGlobals->v_right * 2 + gpGlobals->v_up * -5; 
437   m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= DISPLACER_PRIMARY_USAGE; 
439   EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/gluongun_fire.wav" , 0.9, ATTN_NORM ); 
440   CDispBall *pDispBall = CDispBall::CreateDispBall( vecSrc, m_pPlayer->pev->v_angle, m_pPlayer, this  ); 
444 void  CDisplacer:: Teleport ( void  )
446   m_iPlace = !m_iPlace; 
448   CBaseEntity *pSpot = NULL; 
449   m_iAttackMode = FALSE;//reset firemode  
451   SendWeaponAnim ( DISPLACER_FIRE ); 
455   if  ( g_pGameRules->IsMultiplayer() ) 
457     // Randomize the destination in multiplayer  
458     for  ( int  i = RANDOM_LONG(1,5); i > 0; i-- ) 
459       pSpot = UTIL_FindEntityByClassname(pSpot, "info_player_deathmatch"  ); 
464       pSpot = UTIL_FindEntityByClassname(pSpot, "info_displacer_earth_target"  ); 
466       pSpot = UTIL_FindEntityByClassname(pSpot, "info_displacer_xen_target"  ); 
472     Vector vecSrc	 = m_pPlayer->pev->origin; 
473     CDispBall *pBall = CDispBall::SelfCreate(); 
474     pBall->pev->owner = m_pPlayer->edict(); 
475     pBall->pev->origin = vecSrc; 
477     UTIL_ScreenFade( m_pPlayer, Vector(0, 160, 0), 0.5, 0.5, 255, FFADE_IN ); 
479     m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= DISPLACER_SECONDARY_USAGE; 
480     Vector tmp = pSpot->pev->origin; 
481     tmp.z -= m_pPlayer->pev->mins.z; 
483     UTIL_SetOrigin( m_pPlayer->pev, tmp ); 
485     m_pPlayer->pev->angles = pSpot->pev->angles; 
486     m_pPlayer->pev->velocity = m_pPlayer->pev->basevelocity = g_vecZero; 
487     vecSrc = pSpot->pev->origin; 
489     MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); 
490     WRITE_BYTE(TE_DLIGHT); 
491     WRITE_COORD( vecSrc.x );	// X  
492     WRITE_COORD( vecSrc.y );	// Y  
493     WRITE_COORD( vecSrc.z );	// Z  
494     WRITE_BYTE( 24 );		// radius * 0.1  
495     WRITE_BYTE( 255 );		// r  
496     WRITE_BYTE( 180 );		// g  
497     WRITE_BYTE( 96 );		// b  
498     WRITE_BYTE( 31.66 );		// time * 10  
499     WRITE_BYTE( 1 );		// decay * 0.1  
502     CSprite *pSpr = CSprite::SpriteCreate( "sprites/xflare2.spr" , vecSrc, TRUE ); 
503     pSpr->AnimateAndDie( 6 ); 
504     pSpr->SetTransparency(kRenderGlow, 128, 250, 214, 255, kRenderFxNoDissipation); 
506     EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/tu_fire_missile.wav" , 1.0, ATTN_NORM, 0, PITCH_NORM); 
511     SendWeaponAnim( DISPLACER_SPINUP ); 
512     EMIT_SOUND( edict(), CHAN_BODY, "buttons/button10.wav" , 1, ATTN_NORM ); 
513     m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.3; 
516   m_flNextSecondaryAttack = gpGlobals->time + 2.0; 
517   m_flTimeWeaponIdle = gpGlobals->time + 1.0; 
520 void  CDisplacer::WeaponIdle( void  )
524   m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES ); 
526   if  ( m_flTimeWeaponIdle > gpGlobals->time ) 
529   float  flRand = RANDOM_FLOAT(0,1); 
533     iAnim = DISPLACER_IDLE1; 
534     m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT(10,15); 
538     iAnim = DISPLACER_IDLE2; 
539     m_flTimeWeaponIdle = gpGlobals->time + 3; 
542   SendWeaponAnim( iAnim ); 
  
	
	
__________________ 
	
	За это сообщение fire64 получил предупреждение за оверквотинг 
	Сообщить модератору    | IP: Записан 
	43349