float CWeaponSDKMelee::GetMeleeDamage( bool bIsSecondary ) const { CSDKPlayer *pPlayer = ToSDKPlayer( GetOwner() ); float flDamage = GetSDKWpnData().m_iDamage; if (bIsSecondary) flDamage = GetSDKWpnData().m_iSecondaryDamage; flDamage = pPlayer->m_Shared.ModifySkillValue(flDamage, 0.2f, SKILL_BOUNCER); if (pPlayer->m_Shared.IsDiving()) flDamage *= 1.5f; else if (!pPlayer->GetGroundEntity()) flDamage *= 1.2f; return flDamage; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- bool CSDKGameMovement::CheckJumpButton( void ) { if (!m_pSDKPlayer->IsAlive()) { mv->m_nOldButtons |= IN_JUMP ; // don't jump again until released return false; } #if defined ( SDK_USE_PRONE ) if( m_pSDKPlayer->m_Shared.IsProne() || m_pSDKPlayer->m_Shared.IsGettingUpFromProne() || m_pSDKPlayer->m_Shared.IsGoingProne() ) { mv->m_nOldButtons |= IN_JUMP; return false; } #endif // See if we are waterjumping. If so, decrement count and return. float flWaterJumpTime = player->GetWaterJumpTime(); if ( flWaterJumpTime > 0 ) { flWaterJumpTime -= gpGlobals->frametime; if (flWaterJumpTime < 0) flWaterJumpTime = 0; player->SetWaterJumpTime( flWaterJumpTime ); return false; } // If we are in the water most of the way... if ( m_pSDKPlayer->GetWaterLevel() >= 2 ) { // swimming, not jumping SetGroundEntity( NULL ); if(m_pSDKPlayer->GetWaterType() == CONTENTS_WATER) // We move up a certain amount mv->m_vecVelocity[2] = 100; else if (m_pSDKPlayer->GetWaterType() == CONTENTS_SLIME) mv->m_vecVelocity[2] = 80; // play swiming sound if ( player->GetSwimSoundTime() <= 0 ) { // Don't play sound again for 1 second player->SetSwimSoundTime( 1000 ); PlaySwimSound(); } return false; } // No more effect if (m_pSDKPlayer->GetGroundEntity() == NULL) { mv->m_nOldButtons |= IN_JUMP; return false; // in air, so no effect } if ( mv->m_nOldButtons & IN_JUMP ) return false; // don't pogo stick // In the air now. SetGroundEntity( NULL ); m_pSDKPlayer->PlayStepSound( (Vector &)mv->GetAbsOrigin(), player->GetSurfaceData(), 1.0, true ); m_pSDKPlayer->DoAnimationEvent( PLAYERANIMEVENT_JUMP ); //Tony; liek the landing sound, leaving this here if as an example for playing a jump sound. // // make the jump sound // CPASFilter filter( m_pSDKPlayer->GetAbsOrigin() ); // filter.UsePredictionRules(); // m_pSDKPlayer->EmitSound( filter, m_pSDKPlayer->entindex(), "Player.Jump" ); float flGroundFactor = 1.0f; if ( player->GetSurfaceData() ) { flGroundFactor = player->GetSurfaceData()->game.jumpFactor; } Assert( sv_gravity.GetFloat() == 800.0f ); float flJumpHeight = 268.3281572999747f; //Warning("HERE team: %d", player->GetTeamNumber()); // Accelerate upward // If we are ducking... float startz = mv->m_vecVelocity[2]; if ( ( m_pSDKPlayer->m_Local.m_bDucking ) || ( m_pSDKPlayer->GetFlags() & FL_DUCKING ) ) { // d = 0.5 * g * t^2 - distance traveled with linear accel // t = sqrt(2.0 * 45 / g) - how long to fall 45 units // v = g * t - velocity at the end (just invert it to jump up that high) // v = g * sqrt(2.0 * 45 / g ) // v^2 = g * g * 2.0 * 45 / g // v = sqrt( g * 2.0 * 45 ) if(player->GetTeamNumber() == 2){ mv->m_vecVelocity[2] = flGroundFactor * flJumpHeight ; //mv->m_vecVelocity[1] *= 1.8; //mv->m_vecVelocity[0] *= 1.8; Vector vecForward; AngleVectors( mv->m_vecViewAngles, &vecForward ); vecForward.z = 0; VectorNormalize( vecForward ); VectorAdd( (vecForward*(fabs( mv->m_flForwardMove * 0.5f ))*2), mv->m_vecVelocity, mv->m_vecVelocity ); } else mv->m_vecVelocity[2] = flGroundFactor * flJumpHeight; // flJumpSpeed of 45 } else { if(player->GetTeamNumber() == 2) mv->m_vecVelocity[2] += flGroundFactor * flJumpHeight * 2; // 2 * gravity * height else mv->m_vecVelocity[2] += flGroundFactor * flJumpHeight; // 2 * gravity * height //mv->m_vecVelocity[2] += flGroundFactor * flJumpHeight; // flJumpSpeed of 45 } FinishGravity(); mv->m_outWishVel.z += mv->m_vecVelocity[2] - startz; mv->m_outStepHeight += 0.1f; // Flag that we jumped. mv->m_nOldButtons |= IN_JUMP; // don't jump again until released m_pSDKPlayer->m_Shared.SetJumping( true ); return true; }
void CSDKGameMovement::SetPlayerSpeed( void ) { #if defined ( SDK_USE_PRONE ) // This check is now simplified, just use CanChangePosition because it checks the two things we need to check anyway. if ( m_pSDKPlayer->m_Shared.IsProne() && m_pSDKPlayer->m_Shared.CanChangePosition() && m_pSDKPlayer->GetGroundEntity() != NULL ) { mv->m_flClientMaxSpeed = m_pSDKPlayer->m_Shared.m_flProneSpeed; //Base prone speed } else //not prone - standing or crouching and possibly moving #endif // SDK_USE_PRONE { float stamina = 100.0f; #if defined ( SDK_USE_STAMINA ) || defined ( SDK_USE_SPRINTING ) stamina = m_pSDKPlayer->m_Shared.GetStamina(); #endif if ( mv->m_nButtons & IN_DUCK ) { mv->m_flClientMaxSpeed = m_pSDKPlayer->m_Shared.m_flRunSpeed; //gets cut in fraction later } else { float flMaxSpeed; #if defined ( SDK_USE_SPRINTING ) if ( ( mv->m_nButtons & IN_SPEED ) && ( stamina > 0 ) && ( mv->m_nButtons & IN_FORWARD ) ) { flMaxSpeed = m_pSDKPlayer->m_Shared.m_flSprintSpeed; //sprinting } else #endif // SDK_USE_SPRINTING { flMaxSpeed = m_pSDKPlayer->m_Shared.m_flRunSpeed; //jogging } mv->m_flClientMaxSpeed = flMaxSpeed - 100 + stamina; } } #if defined ( SDK_USE_PRONE ) if ( m_pSDKPlayer->GetGroundEntity() != NULL ) { if( m_pSDKPlayer->m_Shared.IsGoingProne() ) { float pronetime = m_pSDKPlayer->m_Shared.m_flGoProneTime - gpGlobals->curtime; //interp to prone speed float flProneFraction = SimpleSpline( pronetime / TIME_TO_PRONE ); float maxSpeed = mv->m_flClientMaxSpeed; if ( m_pSDKPlayer->m_bUnProneToDuck ) maxSpeed *= 0.33; mv->m_flClientMaxSpeed = ( ( 1 - flProneFraction ) * m_pSDKPlayer->m_Shared.m_flProneSpeed ) + ( flProneFraction * maxSpeed ); } else if ( m_pSDKPlayer->m_Shared.IsGettingUpFromProne() ) { float pronetime = m_pSDKPlayer->m_Shared.m_flUnProneTime - gpGlobals->curtime; //interp to regular speed speed float flProneFraction = SimpleSpline( pronetime / TIME_TO_PRONE ); float maxSpeed = mv->m_flClientMaxSpeed; if ( m_pSDKPlayer->m_bUnProneToDuck ) maxSpeed *= 0.33; mv->m_flClientMaxSpeed = ( flProneFraction * m_pSDKPlayer->m_Shared.m_flProneSpeed ) + ( ( 1 - flProneFraction ) * maxSpeed ); } } #endif // SDK_USE_PRONE }