Lost_Gamer_ NULL Девойс  
	
Дата регистрации : Jan 2017Проживает : ЛидаСообщений : 17Рейтинг 
[кратко] 
Пользователи: -6.0 (2 )  
Нарушения: -5.4 (? )  
Сообщения: 0.0  (Метки )  
Регистрация: 6.6  
 
 
 
 
	
	Проблема c grapple. http://youtu.be/e_X38m6QAg0   здесь показан баг у grapple.C++ Source Code: 
3 *	Copyright © 1996-2001, Valve LLC. All rights reserved. 
5 *	This product contains software technology licensed from Id 
6 *	Software, Inc. ("Id Technology").  Id Technology © 1996 Id Software, Inc. 
9 *   Use, distribution, and modification of this source code and/or resulting 
10 *   object code is restricted to non-commercial enhancements to products from 
11 *   Valve LLC.  All other use, distribution, or modification is prohibited 
12 *   without written permission from Valve LLC. 
24 #include  "customentity.h" 
25 #include  "grapple_tonguetip.h" 
29 LINK_ENTITY_TO_CLASS(grapple_tonguetip, CGrappleTonguetip); 
31 TYPEDESCRIPTION	CGrappleTonguetip::m_SaveData[] = 
33   DEFINE_FIELD(CGrappleTonguetip, m_pMyGrappler, FIELD_CLASSPTR), 
36 IMPLEMENT_SAVERESTORE(CGrappleTonguetip, CBaseEntity); 
38 //========================================================= 
40 //========================================================= 
41 void  CGrappleTonguetip::Spawn(void )
43   pev->movetype = MOVETYPE_TOSS; 
44   pev->classname = MAKE_STRING("grapple_tonguetip" ); 
46   pev->solid = SOLID_BBOX; 
47   pev->rendermode = kRenderTransTexture; 
51   SET_MODEL(ENT(pev), "models/v_bgrap_tonguetip.mdl" ); 
53   UTIL_SetSize(pev, Vector(0, 0, 0), Vector(0, 0, 0)); 
55   SetTouch(&CGrappleTonguetip::TipTouch); 
59 //========================================================= 
61 //========================================================= 
62 CGrappleTonguetip* CGrappleTonguetip::CreateTip(entvars_t *pevOwner, Vector vecStart, Vector vecVelocity) 
64   CGrappleTonguetip* pTonguetip = GetClassPtr((CGrappleTonguetip *)NULL); 
67   UTIL_SetOrigin(pTonguetip->pev, vecStart); 
68   pTonguetip->pev->velocity = vecVelocity; 
69   pTonguetip->pev->owner = ENT(pevOwner); 
70   pTonguetip->m_pMyGrappler = GetClassPtr((CGrapple*)pevOwner); 
71   pTonguetip->SetThink(&CGrappleTonguetip::FlyThink); 
72   pTonguetip->pev->nextthink = gpGlobals->time + 0.1; 
77 //========================================================= 
79 //========================================================= 
80 void  CGrappleTonguetip::FlyThink(void )
82   //ALERT(at_console, "FlyThink\n");  
84   pev->nextthink = gpGlobals->time + 0.1f; 
87 //========================================================= 
89 //========================================================= 
90 void  CGrappleTonguetip::HitThink(void )
92   //ALERT(at_console, "HitThink\n");  
94   pev->nextthink = gpGlobals->time + 0.1f; 
97 //========================================================= 
99 //========================================================= 
100 void  CGrappleTonguetip::TipTouch(CBaseEntity *pOther)
102   // Do not collide with the owner.  
103   if  (ENT(pOther->pev) == pev->owner || (ENT(pOther->pev) == VARS(pev->owner)->owner)) 
109   const  char  *pTextureName; 
110   Vector vecSrc = pev->origin; 
111   Vector vecEnd = pev->origin + pev->velocity * 10; 
113   UTIL_TraceLine(vecSrc, vecEnd, dont_ignore_monsters, ENT(pev), &tr); 
115   CBaseEntity *pEntity = CBaseEntity::Instance(tr.pHit); 
116   vecSrc.CopyToArray(rgfl1); 
117   vecEnd.CopyToArray(rgfl2); 
120     pTextureName = TRACE_TEXTURE(ENT(pEntity->pev), rgfl1, rgfl2); 
122     pTextureName = TRACE_TEXTURE(ENT(0), rgfl1, rgfl2); 
125   int  content = UTIL_PointContents(tr.vecEndPos); 
126   int  hitFlags = pOther->pev->flags; 
128   m_pMyGrappler->m_iHitFlags	= hitFlags; 
130   if (FClassnameIs( pOther->pev, "monster_barnacle" )) 
132     pev->velocity = Vector(0, 0, 0); 
133     pev->movetype = MOVETYPE_NONE; 
135     m_pMyGrappler->m_fTipHit	= FALSE; 
137     m_pMyGrappler->OnTongueTipHitSurface(tr.vecEndPos); 
141   if  ((hitFlags & (FL_CLIENT | FL_MONSTER)) || (FClassnameIs( pOther->pev, "ammo_spore" )) || (hitFlags && pTextureName && m_pMyGrappler && (strnicmp (pTextureName, "xeno_grapple" , 15) == 0))) 
143     // Set player attached flag.  
144     if  (pOther->IsPlayer()) 
145       ((CBasePlayer*)pOther)->m_afPhysicsFlags |= PFLAG_ATTACHED; 
147     pev->origin = pOther->Center(); 
149     pev->movetype = MOVETYPE_FOLLOW; 
150     pev->aiment = ENT(pOther->pev); 
152     pev->velocity = pev->velocity.Normalize(); 
154     m_pMyGrappler->OnTongueTipHitEntity(pOther); 
155     m_pMyGrappler->m_fTipHit	= TRUE; 
160     pev->velocity = Vector(0, 0, 0); 
161     pev->movetype = MOVETYPE_NONE; 
163     m_pMyGrappler->m_fTipHit	= FALSE; 
165     m_pMyGrappler->OnTongueTipHitSurface(tr.vecEndPos); 
169   EMIT_SOUND_DYN(ENT(pev), CHAN_VOICE, "weapons/bgrapple_impact.wav" , 1, ATTN_NORM, 0, 100); 
172   SetThink(&CGrappleTonguetip::HitThink); 
173   pev->nextthink = gpGlobals->time + 0.1f; 
176 void  CGrappleTonguetip::PreRemoval(void )
178   if  (pev->aiment != NULL) 
180     CBaseEntity* pEnt = GetClassPtr((CBaseEntity*)VARS(pev->aiment)); 
181     if  (pEnt && pEnt->IsPlayer()) 
183       // Remove attached flag of the target entity.  
184       ((CBasePlayer*)pEnt)->m_afPhysicsFlags &= ~PFLAG_ATTACHED; 
187   CBaseEntity::PreRemoval(); 
191 LINK_ENTITY_TO_CLASS(weapon_grapple, CGrapple); 
207 //========================================================= 
209 //========================================================= 
210 void  CGrapple::Spawn()
215   m_iId = WEAPON_GRAPPLE; 
216   SET_MODEL(ENT(pev), "models/w_bgrap.mdl" ); 
222   m_fPlayPullSound = FALSE; 
225   m_iFirestate	= FIRESTATE_NONE; 
227   m_flNextPullSoundTime = 0.0f; 
229   FallInit();// get ready to fall down.  
232 //========================================================= 
234 //========================================================= 
235 void  CGrapple::Precache(void )
237   PRECACHE_MODEL("models/v_bgrap.mdl" ); 
238   PRECACHE_MODEL("models/v_bgrap_tonguetip.mdl" ); 
240   PRECACHE_MODEL("models/w_bgrap.mdl" ); 
241   PRECACHE_MODEL("models/p_bgrap.mdl" ); 
243   PRECACHE_SOUND("weapons/alienweap_draw.wav" ); 
245   PRECACHE_SOUND("weapons/bgrapple_cough.wav" ); 
246   PRECACHE_SOUND("weapons/bgrapple_fire.wav" ); 
247   PRECACHE_SOUND("weapons/bgrapple_impact.wav" ); 
248   PRECACHE_SOUND("weapons/bgrapple_pull.wav" ); 
249   PRECACHE_SOUND("weapons/bgrapple_release.wav" ); 
250   PRECACHE_SOUND("weapons/bgrapple_wait.wav" ); 
252   PRECACHE_MODEL("sprites/tongue.spr" ); 
255 //========================================================= 
257 //========================================================= 
258 int  CGrapple::GetItemInfo(ItemInfo *p)
260   p->pszName = STRING(pev->classname); 
265   p->iMaxClip = WEAPON_GRAPPLE; 
268   p->iId = WEAPON_GRAPPLE; 
269   p->iWeight = GRAPPLE_WEIGHT; 
273 //========================================================= 
275 //========================================================= 
276 BOOL CGrapple::Deploy() 
278   m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.9f; 
279   m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.9f; 
281   return  DefaultDeploy("models/v_bgrap.mdl" , "models/p_bgrap.mdl" , BGRAP_UP, "bgrap" ); 
284 //========================================================= 
286 //========================================================= 
287 void  CGrapple::Holster(int  skiplocal /* = 0 */ )
291   m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5; 
292   SendWeaponAnim(BGRAP_DOWN); 
295 //========================================================= 
297 //========================================================= 
298 void  CGrapple::PrimaryAttack(void )
300   if  (m_iFirestate != FIRESTATE_NONE) 
303   m_iFirestate = FIRESTATE_FIRE; 
305   m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + RANDOM_FLOAT(10, 15); 
306   m_flTimeWeaponIdle = UTIL_WeaponTimeBase(); 
309 //========================================================= 
311 //========================================================= 
312 void  CGrapple::ItemPostFrame(void )
314   if  (!(m_pPlayer->pev->button & IN_ATTACK)) 
316     m_flLastFireTime = 0.0f; 
320   if  (m_iFirestate != FIRESTATE_NONE) 
327     // Check if fire is still eligible.  
328     CheckFireEligibility(); 
330     // Check if the current tip is attached to a monster or a wall.  
331     // If the tongue tip move type is MOVETYPE_FOLLOW, then it  
332     // implies that we are targetting a monster, so it will kill  
333     // the monster when close enough.  
334     CheckTargetProximity(); 
336     // Update the tip velocity and position.  
339     // Update the tongue beam.  
342     // Update the pull sound.  
346   if  ((m_pPlayer->pev->button & IN_ATTACK) && CanAttack(m_flNextPrimaryAttack, gpGlobals->time, UseDecrement())) 
348     if  ((m_iClip == 0 && pszAmmo1()) || (iMaxClip() == -1 && !m_pPlayer->m_rgAmmo[PrimaryAmmoIndex()])) 
350       m_fFireOnEmpty = TRUE; 
354     m_pPlayer->TabulateAmmo(); 
357     m_pPlayer->pev->button &= ~IN_ATTACK; 
359   else  if  (!(m_pPlayer->pev->button & (IN_ATTACK | IN_ATTACK2))) 
361     if  (m_iFirestate != FIRESTATE_NONE) 
367     // no fire buttons down  
369     m_fFireOnEmpty = FALSE; 
371     if  (!IsUseable() && m_flNextPrimaryAttack < (UseDecrement() ? 0.0 : gpGlobals->time)) 
373       // weapon isn't useable, switch.  
374       if  (!(iFlags() & ITEM_FLAG_NOAUTOSWITCHEMPTY) && g_pGameRules->GetNextBestWeapon(m_pPlayer, this )) 
376         m_flNextPrimaryAttack = (UseDecrement() ? 0.0 : gpGlobals->time) + 0.3; 
387   if  (ShouldWeaponIdle()) 
393 //========================================================= 
395 //========================================================= 
396 void  CGrapple::WeaponIdle(void )
400   if  (m_flTimeWeaponIdle > UTIL_WeaponTimeBase()) 
403   if  (m_iFirestate != FIRESTATE_NONE) 
405     switch  (m_iFirestate) 
411     case  FIRESTATE_FIRE2: 
419     case  FIRESTATE_REACH: 
423     case  FIRESTATE_TRAVEL: 
427     case  FIRESTATE_RELEASE: 
438   float  flRand = UTIL_SharedRandomFloat(m_pPlayer->random_seed, 0, 1); 
441     iAnim = BGRAP_BREATHE; 
442     m_flTimeWeaponIdle = 2.6f; 
444   else  if  (flRand <= 0.7f) 
446     iAnim = BGRAP_LONGIDLE; 
447     m_flTimeWeaponIdle = 10.0f; 
449   else  if  (flRand <= 0.95) 
451     iAnim = BGRAP_SHORTIDLE; 
452     m_flTimeWeaponIdle = 1.3f; 
457     m_flTimeWeaponIdle = 4.6f; 
459     EMIT_SOUND(ENT(pev), CHAN_BODY, "weapons/bgrapple_cough.wav" , 1, ATTN_NORM); 
462   SendWeaponAnim(iAnim, UseDecrement()); 
465 //========================================================= 
467 //========================================================= 
468 void  CGrapple::Fire(void )
470   EMIT_SOUND(ENT(pev), CHAN_BODY, "weapons/bgrapple_fire.wav" , 1, ATTN_NORM); 
472   SendWeaponAnim(BGRAP_FIRE, UseDecrement()); 
473   m_iFirestate = FIRESTATE_FIRE2; 
475   m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + RANDOM_FLOAT(15, 20); 
476   m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.45f; 
479 //========================================================= 
481 //========================================================= 
482 void  CGrapple::Fire2(void )
484   // Create the tongue tip.  
487   // Start the pull sound.  
490   m_iFirestate = FIRESTATE_WAIT; 
492   m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + RANDOM_FLOAT(15, 20); 
493   m_flTimeWeaponIdle = UTIL_WeaponTimeBase(); 
496 //========================================================= 
498 //========================================================= 
499 void  CGrapple::FireWait(void )
501   SendWeaponAnim(BGRAP_FIREWAITING, UseDecrement()); 
503   m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + RANDOM_FLOAT(15, 20); 
504   m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5f; 
507 //========================================================= 
509 //========================================================= 
510 void  CGrapple::FireReach(void )
512   SendWeaponAnim(BGRAP_FIREREACHED, UseDecrement()); 
513   m_iFirestate = FIRESTATE_TRAVEL; 
515   // Start pulling the owner toward tongue tip.  
518   m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + RANDOM_FLOAT(15, 20); 
519   //m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 4.7;  
520   m_flTimeWeaponIdle = UTIL_WeaponTimeBase(); 
523 //========================================================= 
525 //========================================================= 
526 void  CGrapple::FireTravel(void )
528   SendWeaponAnim(BGRAP_FIRETRAVEL, UseDecrement()); 
530   m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + RANDOM_FLOAT(15, 20); 
531   m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.6f; 
534 //========================================================= 
536 //========================================================= 
537 void  CGrapple::FireRelease(void )
540   // STOP_SOUND(ENT(pev), CHAN_VOICE, "weapons/bgrapple_pull.wav");  
542   // Play release sound.  
543   EMIT_SOUND(ENT(pev), CHAN_BODY, "weapons/bgrapple_release.wav" , 1, ATTN_NORM); 
545   SendWeaponAnim(BGRAP_FIRERELEASE, UseDecrement()); 
546   m_iFirestate = FIRESTATE_NONE; 
553   // Destroy the tongue tip.  
559   m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.75f; 
560   m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.1; 
563 //========================================================= 
565 //========================================================= 
566 void  CGrapple::OnTongueTipHitSurface(const  Vector& vecTarget)
569   //ALERT(at_console, "Hit surface at: (%f,%f,%f).\n", vecTarget.x, vecTarget.y, vecTarget.z);  
574 //========================================================= 
576 //========================================================= 
577 void  CGrapple::OnTongueTipHitEntity(CBaseEntity* pEntity)
580   ALERT(at_console, "Hit entity with classname %s.\n" , (char *)STRING(pEntity->pev->classname)); 
584 //========================================================= 
586 //========================================================= 
587 void  CGrapple::StartPull(void )
590   Vector vecOrigin = m_pPlayer->pev->origin; 
593   UTIL_SetOrigin(m_pPlayer->pev, vecOrigin); 
595   m_pPlayer->pev->movetype = MOVETYPE_FLY; 
596   m_pPlayer->pev->gravity = 0.0f; 
598   m_pPlayer->pev->flags &= ~FL_ONGROUND; 
600   m_pPlayer->m_afPhysicsFlags |= PFLAG_LATCHING; 
604 //========================================================= 
606 //========================================================= 
607 void  CGrapple::StopPull(void )
610   m_pPlayer->pev->movetype = MOVETYPE_WALK; 
611   m_pPlayer->pev->gravity = 1.0f; 
613   m_pPlayer->m_afPhysicsFlags &= ~PFLAG_LATCHING; 
617 //========================================================= 
619 //========================================================= 
620 void  CGrapple::Pull( void  )
623   Vector vecOwnerPos, vecTipPos, vecDirToTip; 
624   vecOwnerPos = m_pPlayer->pev->origin; 
625   vecTipPos = m_pTongueTip->pev->origin; 
626   vecDirToTip = (vecTipPos - vecOwnerPos).Normalize(); 
628   m_pPlayer->pev->velocity = vecDirToTip * 450; 
630   m_pPlayer->m_afPhysicsFlags |= PFLAG_LATCHING; 
634 //========================================================= 
636 //========================================================= 
637 void  CGrapple::CreateTongueTip( void  )
640   Vector vecSrc, vecAiming, vecVel; 
641   UTIL_MakeVectors( m_pPlayer->pev->v_angle ); 
643   vecSrc = m_pPlayer->GetGunPosition(); 
644   vecSrc = vecSrc + gpGlobals->v_forward * 8; 
645   vecSrc = vecSrc + gpGlobals->v_right * 3; 
646   vecSrc = vecSrc + gpGlobals->v_up * -3; 
648   vecVel = gpGlobals->v_forward * 1200; 
650   //GetAttachment(0, vecSrc, vecAiming);  
652   m_pTongueTip = CGrappleTonguetip::CreateTip(pev, vecSrc, vecVel); 
653   CreateBeam(m_pTongueTip); 
659 //========================================================= 
661 //========================================================= 
662 void  CGrapple::DestroyTongueTip(void )
669     UTIL_Remove(m_pTongueTip); 
675 //========================================================= 
677 //========================================================= 
678 void  CGrapple::UpdateTongueTip(void )
683     Vector tipVel = m_pTongueTip->pev->velocity; 
684     Vector ownerVel = VARS(pev->owner)->velocity; 
688     newVel.x = tipVel.x + (ownerVel.x * 0.02f); 
689     newVel.y = tipVel.y + (ownerVel.y * 0.05f); 
690     newVel.z = tipVel.z + (ownerVel.z * 0.01f); 
692     m_pTongueTip->pev->velocity = newVel; 
697 //========================================================= 
699 //========================================================= 
700 void  CGrapple::CreateBeam( CBaseEntity* pTongueTip )
703   m_pBeam = CBeam::BeamCreate("sprites/tongue.spr" , 16); 
707     m_pBeam-><img src="images/smilies/pp2.gif"  border="0"  alt="" >ointsInit(pTongueTip->pev->origin, pev->origin); 
708     m_pBeam->SetFlags( BEAM_FSOLID ); 
709     m_pBeam->SetBrightness( 100.0 ); 
711     m_pBeam->SetEndAttachment( 1 ); 
712     m_pBeam->pev->spawnflags |= SF_BEAM_TEMPORARY; 
717 //========================================================= 
719 //========================================================= 
720 void  CGrapple::DestroyBeam(void )
725     UTIL_Remove(m_pBeam); 
731 //========================================================= 
733 //========================================================= 
734 void  CGrapple::UpdateBeam(void )
740     UTIL_MakeVectors(m_pPlayer->pev->v_angle); 
742     vecSrc = m_pPlayer->GetGunPosition(); 
743     vecSrc = vecSrc + gpGlobals->v_forward * 16; 
744     vecSrc = vecSrc + gpGlobals->v_right * 6; 
745     vecSrc = vecSrc + gpGlobals->v_up * -8; 
746     m_pBeam->SetStartPos(vecSrc); 
747     m_pBeam->SetEndPos(m_pTongueTip->pev->origin); 
748     m_pBeam->RelinkBeam(); 
753 //========================================================= 
755 //========================================================= 
756 BOOL CGrapple::CanAttack(float  attack_time, float  curtime, BOOL isPredicted) 
758 #if   defined ( CLIENT_WEAPONS )
764     return  (attack_time <= curtime) ? TRUE : FALSE; 
768     return  (attack_time <= 0.0) ? TRUE : FALSE; 
773 void  CGrapple::StartPullSound(void )
775   m_flNextPullSoundTime = UTIL_WeaponTimeBase(); 
776   m_fPlayPullSound = TRUE; 
779 void  CGrapple::UpdatePullSound(void )
781   if  (!m_fPlayPullSound) 
784   if  (m_flNextPullSoundTime <= UTIL_WeaponTimeBase()) 
786     EMIT_SOUND(ENT(pev), CHAN_BODY, "weapons/bgrapple_pull.wav" , 1, ATTN_NORM); 
787     m_flNextPullSoundTime = UTIL_WeaponTimeBase() + 0.6f; 
791 void  CGrapple::ResetPullSound(void )
793   STOP_SOUND(ENT(pev), CHAN_BODY, "weapons/bgrapple_pull.wav" ); 
794   m_flNextPullSoundTime = 0.0f; 
795   m_fPlayPullSound = FALSE; 
798 void  CGrapple::CheckTargets( void  )
799 {//If the target isn't monster or xeno_grapple  
802   EMIT_SOUND(ENT(pev), CHAN_BODY, "weapons/bgrapple_release.wav" , 1, ATTN_NORM); 
808 BOOL CGrapple::IsTongueColliding(const  Vector& vecShootOrigin, const  Vector& vecTipPos) 
812   UTIL_TraceLine(vecShootOrigin, vecTipPos, dont_ignore_monsters, ENT(m_pPlayer->pev), &tr); 
814   if  (tr.flFraction != 1.0) 
816     if  (m_pTongueTip->pev->movetype == MOVETYPE_FOLLOW) 
818       if  (tr.pHit && m_pTongueTip->pev->aiment && m_pTongueTip->pev->aiment == tr.pHit) 
831 void  CGrapple::CheckFireEligibility(void )
834   // Do not check for this if the tongue is not valid.  
838   // Check if the tongue is through walls or if other things  
839   // such as entities are between the owner and the tip.  
840   if  (IsTongueColliding(m_pPlayer->GetGunPosition(), m_pTongueTip->pev->origin)) 
849 BOOL CGrapple::CheckTargetProximity(void ) 
852   // Do not check for this if the tongue is not valid.  
856   if  (m_pTongueTip->pev->movetype == MOVETYPE_FOLLOW) 
858     // Trace a hull around to see if we hit something within 20 units.  
862     pev->origin + VARS(pev->owner)->velocity.Normalize() * 20, 
863     dont_ignore_monsters, 
869     // Check to see if we are close enough to our target.  
870     // In the case o a monster, attempt to get a pointer to  
871     // the entity, gib it, release grappler fire.  
872     edict_t* pHit = ENT(tr.pHit); 
874     (VARS(pHit)->flags & FL_MONSTER) && 
875     (m_pTongueTip->pev->aiment == tr.pHit)) 
877       // Get a pointer to the entity.  
878       CBaseEntity* pEnt = GetClassPtr((CBaseEntity*)VARS(tr.pHit)); 
885         //ALERT(at_console, "ERROR: %s attempted to reference an unlisted monster.\n", STRING(m_pTongueTip->pev->classname));  
895 void  CGrapple::Attack( void  )
898   //ALERT(at_console, "Attack\n");  
900   m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + gpGlobals->time + 0.5f; 
904   pev->origin + VARS(pev->owner)->velocity.Normalize() * 20, 
905   dont_ignore_monsters, 
909   UTIL_MakeVectors( m_pPlayer->pev->v_angle ); 
910   float  flDamage = gSkillData.plrDmgGrapple; 
912   if (g_pGameRules->IsMultiplayer()) 
916   CBaseEntity::Instance( tr.pHit )->TraceAttack( m_pPlayer->pev, flDamage, gpGlobals->v_forward, &tr, DMG_CLUB | DMG_ALWAYSGIB ); 
917   ApplyMultiDamage( pev, m_pPlayer->pev ); 
 
	
	
	
	
	Сообщить модератору    | IP: Записан 
	166670