void CWeaponG3SG1::G3SG1Fire(float flSpread) { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return; // If we are not zoomed in, or we have very recently zoomed and are still transitioning, the bullet diverts more. if (pPlayer->GetFOV() == pPlayer->GetDefaultFOV() || (gpGlobals->curtime < m_zoomFullyActiveTime)) flSpread += 0.025; // Mark the time of this shot and determine the accuracy modifier based on the last shot fired... m_flAccuracy = 0.55 + (0.3) * (gpGlobals->curtime - m_flLastFire); if (m_flAccuracy > 0.98) m_flAccuracy = 0.98; m_flLastFire = gpGlobals->curtime; if (!CSBaseGunFire(flSpread, GetCSWpnData().m_flCycleTime, true)) return; // Adjust the punch angle. QAngle angle = pPlayer->GetPunchAngle(); angle.x -= SharedRandomFloat("G3SG1PunchAngleX", 0.75, 1.75) + (angle.x / 4); angle.y += SharedRandomFloat("G3SG1PunchAngleY", -0.75, 0.75); pPlayer->SetPunchAngle(angle); }
void CWeaponBaseGun::DoFireEffects() { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (pPlayer) pPlayer->DoMuzzleFlash(); }
void CTriggerLimitMovement::Think() { CMomentumPlayer *pPlayer = ToCMOMPlayer(UTIL_GetListenServerHost()); if (pPlayer && IsTouching(pPlayer)) { if (HasSpawnFlags(LIMIT_BHOP)) { pPlayer->DisableButtons(IN_JUMP); // if player in air if (pPlayer->GetGroundEntity() != nullptr) { // only start timer if we havent already started if (!m_BhopTimer.HasStarted()) m_BhopTimer.Start(FL_BHOP_TIMER); // when finished if (m_BhopTimer.IsElapsed()) { pPlayer->EnableButtons(IN_JUMP); m_BhopTimer.Reset(); } } } } // figure out if timer elapsed or not if (m_BhopTimer.GetRemainingTime() <= 0) m_BhopTimer.Invalidate(); // DevLog("Bhop Timer Remaining Time:%f\n", m_BhopTimer.GetRemainingTime()); // HACKHACK - this prevents think from running too fast, breaking the timer // and preventing the player from jumping until the timer runs out // Thinking every 0.25 seconds seems to feel good, but we can adjust this later SetNextThink(gpGlobals->curtime + 0.25); BaseClass::Think(); }
void CWeaponScout::SCOUTFire(float flSpread) { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (pPlayer == NULL) { Assert(pPlayer != NULL); return; } // If we are not zoomed in, or we have very recently zoomed and are still transitioning, the bullet diverts more. if (pPlayer->GetFOV() == pPlayer->GetDefaultFOV() || (gpGlobals->curtime < m_zoomFullyActiveTime)) { flSpread += 0.025; } if (pPlayer->GetFOV() != pPlayer->GetDefaultFOV()) { pPlayer->m_bResumeZoom = true; pPlayer->m_iLastZoom = pPlayer->GetFOV(); #ifndef CLIENT_DLL pPlayer->SetFOV(pPlayer, pPlayer->GetDefaultFOV(), 0.05f); #endif } if (!CSBaseGunFire(flSpread, GetCSWpnData().m_flCycleTime, true)) return; QAngle angle = pPlayer->GetPunchAngle(); angle.x -= 2; pPlayer->SetPunchAngle(angle); }
void CWeaponBaseGun::ItemPostFrame() { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return; if ((m_flNextPrimaryAttack <= gpGlobals->curtime) && (pPlayer->m_bResumeZoom)) { #ifndef CLIENT_DLL pPlayer->SetFOV(pPlayer, pPlayer->m_iLastZoomFOV, 0.05f); // Make sure we think that we are zooming on the server so we don't get instant acc bonus m_zoomFullyActiveTime = gpGlobals->curtime + 0.05f; if (pPlayer->GetFOV() == pPlayer->m_iLastZoomFOV) { // return the fade level in zoom. pPlayer->m_bResumeZoom = false; } #endif } ProcessAnimationEvents(); BaseClass::ItemPostFrame(); }
float CWeaponG3SG1::GetMaxSpeed() { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (pPlayer && pPlayer->GetFOV() == pPlayer->GetDefaultFOV()) return BaseClass::GetMaxSpeed(); else return 150; // zoomed in }
float CWeaponSG550::GetMaxSpeed() const { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer || pPlayer->GetFOV() == 90) return BaseClass::GetMaxSpeed(); else return 150; // zoomed in }
float CWeaponSG552::GetMaxSpeed() const { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer || pPlayer->GetFOV() == pPlayer->GetDefaultFOV()) return BaseClass::GetMaxSpeed(); else return 200; // zoomed in. }
void CWeaponUMP45::PrimaryAttack() { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return; if (!FBitSet(pPlayer->GetFlags(), FL_ONGROUND)) UMP45Fire(0.24f * m_flAccuracy); else UMP45Fire(0.04f * m_flAccuracy); }
void CWeaponMP5Navy::PrimaryAttack(void) { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return; if (!FBitSet(pPlayer->GetFlags(), FL_ONGROUND)) MP5NFire(0.2f * m_flAccuracy); else MP5NFire(0.04f * m_flAccuracy); }
void CWeaponMAC10::PrimaryAttack() { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return; if (!FBitSet(pPlayer->GetFlags(), FL_ONGROUND)) MAC10Fire(0.375f * m_flAccuracy); else MAC10Fire(0.03f * m_flAccuracy); }
void CWeaponM4A1::DoFireEffects() { if (!m_bSilencerOn) { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (pPlayer) { pPlayer->DoMuzzleFlash(); } } }
void CWeaponTMP::PrimaryAttack(void) { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return; if (!FBitSet(pPlayer->GetFlags(), FL_ONGROUND)) TMPFire(0.25f * m_flAccuracy); else TMPFire(0.03f * m_flAccuracy); }
void CWeaponAWP::UnzoomThink(void) { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (pPlayer == nullptr) { Assert(pPlayer != nullptr); return; } pPlayer->SetFOV(pPlayer, pPlayer->GetDefaultFOV(), 0.1f); }
void CWeaponP90::PrimaryAttack() { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return; if (!FBitSet(pPlayer->GetFlags(), FL_ONGROUND)) P90Fire(0.3f * m_flAccuracy); else if (pPlayer->GetAbsVelocity().Length2D() > 170) P90Fire(0.115f * m_flAccuracy); else P90Fire(0.045f * m_flAccuracy); }
void CAK47::PrimaryAttack() { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return; if (!FBitSet(pPlayer->GetFlags(), FL_ONGROUND)) AK47Fire(0.04f + 0.4f * m_flAccuracy); else if (pPlayer->GetAbsVelocity().Length2D() > 140) AK47Fire(0.04f + 0.07f * m_flAccuracy); else AK47Fire(0.0275f * m_flAccuracy); }
//MOM_TODO: Consider LJ gametype float CWeaponScout::GetMaxSpeed() const { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (pPlayer == NULL) { Assert(pPlayer != NULL); return BaseClass::GetMaxSpeed(); } if (pPlayer->GetFOV() == pPlayer->GetDefaultFOV()) return BaseClass::GetMaxSpeed(); else return 220; // zoomed in. }
void CWeaponAug::AUGFire(float flSpread, bool bZoomed) { float flCycleTime = GetCSWpnData().m_flCycleTime; if (bZoomed) flCycleTime = 0.135f; if (!CSBaseGunFire(flSpread, flCycleTime, true)) return; CMomentumPlayer *pPlayer = GetPlayerOwner(); // CSBaseGunFire can kill us, forcing us to drop our weapon, if we shoot something that explodes if (!pPlayer) return; if (pPlayer->GetAbsVelocity().Length2D() > 5) pPlayer->KickBack(1, 0.45, 0.275, 0.05, 4, 2.5, 7); else if (!FBitSet(pPlayer->GetFlags(), FL_ONGROUND)) pPlayer->KickBack(1.25, 0.45, 0.22, 0.18, 5.5, 4, 5); else if (FBitSet(pPlayer->GetFlags(), FL_DUCKING)) pPlayer->KickBack(0.575, 0.325, 0.2, 0.011, 3.25, 2, 8); else pPlayer->KickBack(0.625, 0.375, 0.25, 0.0125, 3.5, 2.25, 8); }
void CTriggerLimitMovement::EndTouch(CBaseEntity *pOther) { if (pOther && pOther->IsPlayer()) { CMomentumPlayer *pPlayer = ToCMOMPlayer(pOther); if (pPlayer) { pPlayer->EnableButtons(IN_JUMP); pPlayer->EnableButtons(IN_DUCK); } } m_BhopTimer.Reset(); BaseClass::EndTouch(pOther); }
void CWeaponSG550::PrimaryAttack() { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return; if (!FBitSet(pPlayer->GetFlags(), FL_ONGROUND)) SG550Fire(0.45f * (1 - m_flAccuracy)); else if (pPlayer->GetAbsVelocity().Length2D() > 5) SG550Fire(0.15f); else if (FBitSet(pPlayer->GetFlags(), FL_DUCKING)) SG550Fire(0.04f * (1 - m_flAccuracy)); else SG550Fire(0.05f * (1 - m_flAccuracy)); }
void CWeaponG3SG1::PrimaryAttack() { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return; if (!FBitSet(pPlayer->GetFlags(), FL_ONGROUND)) G3SG1Fire(0.45 * (1 - m_flAccuracy)); else if (pPlayer->GetAbsVelocity().Length2D() > 5) G3SG1Fire(0.15); else if (FBitSet(pPlayer->GetFlags(), FL_DUCKING)) G3SG1Fire(0.035 * (1 - m_flAccuracy)); else G3SG1Fire(0.055 * (1 - m_flAccuracy)); }
void CWeaponSG552::PrimaryAttack() { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return; bool bZoomed = pPlayer->GetFOV() < pPlayer->GetDefaultFOV(); if (!FBitSet(pPlayer->GetFlags(), FL_ONGROUND)) SG552Fire(0.035f + 0.45f * m_flAccuracy, bZoomed); else if (pPlayer->GetAbsVelocity().Length2D() > 140) SG552Fire(0.035f + 0.075f * m_flAccuracy, bZoomed); else SG552Fire(0.02f * m_flAccuracy, bZoomed); }
float CCSPlayerAnimState::GetCurrentMaxGroundSpeed() { Activity currentActivity = m_pOuter->GetSequenceActivity( m_pOuter->GetSequence() ); if ( currentActivity == ACT_WALK || currentActivity == ACT_IDLE ) return ANIM_TOPSPEED_WALK; else if ( currentActivity == ACT_RUN ) { if ( m_pPlayer ) { CBaseCombatWeapon *activeWeapon = m_pPlayer->GetActiveWeapon(); if ( activeWeapon ) { CWeaponCSBase *csWeapon = dynamic_cast< CWeaponCSBase * >( activeWeapon ); if ( csWeapon ) { return csWeapon->GetMaxSpeed(); } } } return ANIM_TOPSPEED_RUN; } else if ( currentActivity == ACT_RUN_CROUCH ) return ANIM_TOPSPEED_RUN_CROUCH; else return 0; }
void ClientActive(edict_t *pEdict, bool bLoadGame) { CMomentumPlayer *pPlayer = dynamic_cast< CMomentumPlayer* >(CBaseEntity::Instance(pEdict)); Assert(pPlayer); if (!pPlayer) { return; } pPlayer->InitialSpawn(); if (!bLoadGame) { pPlayer->Spawn(); } }
bool CWeaponBaseGun::Reload() { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return false; if (pPlayer->GetAmmoCount(GetPrimaryAmmoType()) <= 0) return false; int iResult = DefaultReload(GetMaxClip1(), GetMaxClip2(), ACT_VM_RELOAD); if (!iResult) return false; pPlayer->SetAnimation(PLAYER_RELOAD); #ifndef CLIENT_DLL if ((iResult) && (pPlayer->GetFOV() != pPlayer->GetDefaultFOV())) { pPlayer->SetFOV(pPlayer, pPlayer->GetDefaultFOV()); } #endif m_flAccuracy = 0.2; pPlayer->m_iShotsFired = 0; m_bDelayFire = false; return true; }
void CTriggerTimerStart::StartTouch(CBaseEntity *pOther) { g_Timer->SetStartTrigger(this); CMomentumPlayer *pPlayer = ToCMOMPlayer(pOther); if (pPlayer) { pPlayer->ResetRunStats();//Reset run stats pPlayer->m_RunData.m_bIsInZone = true; pPlayer->m_RunData.m_bMapFinished = false; pPlayer->m_RunData.m_bTimerRunning = false; pPlayer->m_RunData.m_flLastJumpVel = 0; //also reset last jump velocity when we enter the start zone pPlayer->m_RunData.m_flRunTime = 0.0f; //MOM_TODO: Do we want to reset this? if (g_Timer->IsRunning()) { g_Timer->Stop(false);//Handles stopping replay recording as well g_Timer->DispatchResetMessage(); //lower the player's speed if they try to jump back into the start zone } //begin recording replay // TODO (OrfeasZ): Do we need to pass a player here? if (!g_ReplaySystem->GetReplayManager()->Recording()) { g_ReplaySystem->BeginRecording(pPlayer); } else { g_ReplaySystem->StopRecording(pPlayer, true, false); g_ReplaySystem->BeginRecording(pPlayer); } } else { CMomentumReplayGhostEntity *pGhost = dynamic_cast<CMomentumReplayGhostEntity*>(pOther); if (pGhost) { pGhost->m_RunData.m_bIsInZone = true; pGhost->m_RunData.m_bMapFinished = false; } } // start thinking SetNextThink(gpGlobals->curtime); BaseClass::StartTouch(pOther); }
void CWeaponScout::PrimaryAttack(void) { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (pPlayer == NULL) { Assert(pPlayer != NULL); return; } if (!FBitSet(pPlayer->GetFlags(), FL_ONGROUND)) SCOUTFire(0.2); else if (pPlayer->GetAbsVelocity().Length2D() > 170) SCOUTFire(0.075); else if (FBitSet(pPlayer->GetFlags(), FL_DUCKING)) SCOUTFire(0.0); else SCOUTFire(0.007); }
void CWeaponScout::SecondaryAttack() { #ifndef CLIENT_DLL CMomentumPlayer *pPlayer = GetPlayerOwner(); if (pPlayer == NULL) { Assert(pPlayer != NULL); return; } if (pPlayer->GetFOV() == pPlayer->GetDefaultFOV()) { pPlayer->SetFOV(pPlayer, 40, 0.15f); } else if (pPlayer->GetFOV() == 40) { pPlayer->SetFOV(pPlayer, 15, 0.05); } else if (pPlayer->GetFOV() == 15) { pPlayer->SetFOV(pPlayer, pPlayer->GetDefaultFOV(), 0.05f); } //pPlayer->ResetMaxSpeed(); #endif m_flNextSecondaryAttack = gpGlobals->curtime + 0.3; m_zoomFullyActiveTime = gpGlobals->curtime + 0.15; // The worst zoom time from above. #ifndef CLIENT_DLL // If this isn't guarded, the sound will be emitted twice, once by the server and once by the client. // Let the server play it since if only the client plays it, it's liable to get played twice cause of // a prediction error. joy. EmitSound("Default.Zoom"); // zoom sound // let the bots hear the rifle zoom IGameEvent * event = gameeventmanager->CreateEvent("weapon_zoom"); if (event) { event->SetInt("userid", pPlayer->GetUserID()); gameeventmanager->FireEvent(event); } #endif }
void CHEGrenadeProjectile::Detonate() { BaseClass::Detonate(); // tell the bots an HE grenade has exploded CMomentumPlayer *player = static_cast<CMomentumPlayer*>(GetThrower()); if ( player ) { IGameEvent * event = gameeventmanager->CreateEvent( "hegrenade_detonate" ); if ( event ) { event->SetInt( "userid", player->GetUserID() ); event->SetFloat( "x", GetAbsOrigin().x ); event->SetFloat( "y", GetAbsOrigin().y ); event->SetFloat( "z", GetAbsOrigin().z ); gameeventmanager->FireEvent( event ); } } }
float CWeaponAWP::GetMaxSpeed() const { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (pPlayer == nullptr) { Assert(pPlayer != nullptr); return BaseClass::GetMaxSpeed(); } if (pPlayer->GetFOV() == pPlayer->GetDefaultFOV()) { return BaseClass::GetMaxSpeed(); } else { // Slower speed when zoomed in. return 150; } }