void AVehiclePawn::Die() { if (CanDie()) { OnDeath(); } }
void ANimModCharacter::OnRep_LastTakeHitInfo() { if (LastTakeHitInfo.bKilled) { OnDeath(LastTakeHitInfo.ActualDamage, LastTakeHitInfo.GetDamageEvent(), LastTakeHitInfo.PawnInstigator.Get(), LastTakeHitInfo.DamageCauser.Get()); } else { PlayHit(LastTakeHitInfo.ActualDamage, LastTakeHitInfo.GetDamageEvent(), LastTakeHitInfo.PawnInstigator.Get(), LastTakeHitInfo.DamageCauser.Get()); } }
void iGameEntity::SetHealth(float afHealth) { if(afHealth <=0 && mfHealth >0) { mfHealth = afHealth; OnDeath(0); } else { mfHealth = afHealth; } }
void CEnemyBase::Damage( int amount /*!< The amount of damage to do */ ) { m_health -= amount; if (m_health <= 0) { OnDeath(); m_dieTimer = SDL_GetTicks(); if (m_audio[EnemyAudio::Die] != NULL) m_audio[EnemyAudio::Die]->Play(); } else { if (m_audio[EnemyAudio::Hurt] != NULL) m_audio[EnemyAudio::Hurt]->Play(); } }
bool AAmethystCharacter::Die(float KillingDamage, FDamageEvent const& DamageEvent, AController* Killer, AActor* DamageCauser) { if (!CanDie(KillingDamage, DamageEvent, Killer, DamageCauser)) { return false; } Health = FMath::Min(0.0f, Health); // if this is an environmental death then refer to the previous killer so that they receive credit (knocked into lava pits, etc) UDamageType const* const DamageType = DamageEvent.DamageTypeClass ? DamageEvent.DamageTypeClass->GetDefaultObject<UDamageType>() : GetDefault<UDamageType>(); Killer = GetDamageInstigator(Killer, *DamageType); NetUpdateFrequency = GetDefault<AAmethystCharacter>()->NetUpdateFrequency; CharacterMovement->ForceReplicationUpdate(); OnDeath(KillingDamage, DamageEvent, Killer ? Killer->GetPawn() : NULL, DamageCauser); return true; }
bool AShooterCharacter::Die(float KillingDamage, FDamageEvent const& DamageEvent, AController* Killer, AActor* DamageCauser) { if (!CanDie(KillingDamage, DamageEvent, Killer, DamageCauser)) { return false; } Health = FMath::Min(0.0f, Health); /* Fallback to default DamageType if none is specified */ UDamageType const* const DamageType = DamageEvent.DamageTypeClass ? DamageEvent.DamageTypeClass->GetDefaultObject<UDamageType>() : GetDefault<UDamageType>(); Killer = GetDamageInstigator(Killer, *DamageType); /* Notify the gamemode we got killed for scoring and game over state */ AController* KilledPlayer = Controller ? Controller : Cast<AController>(GetOwner()); OnDeath(KillingDamage, DamageEvent, Killer ? Killer->GetPawn() : NULL, DamageCauser); return true; }
bool ANimModCharacter::Die(float KillingDamage, FDamageEvent const& DamageEvent, AController* Killer, AActor* DamageCauser) { if (!CanDie(KillingDamage, DamageEvent, Killer, DamageCauser)) { return false; } Health = FMath::Min(0, Health); // if this is an environmental death then refer to the previous killer so that they receive credit (knocked into lava pits, etc) UDamageType const* const DamageType = DamageEvent.DamageTypeClass ? DamageEvent.DamageTypeClass->GetDefaultObject<UDamageType>() : GetDefault<UDamageType>(); Killer = GetDamageInstigator(Killer, *DamageType); AController* const KilledPlayer = (Controller != NULL) ? Controller : Cast<AController>(GetOwner()); GetWorld()->GetAuthGameMode<ANimModGameMode>()->Killed(Killer, KilledPlayer, this, DamageType); NetUpdateFrequency = GetDefault<ANimModCharacter>()->NetUpdateFrequency; GetCharacterMovement()->ForceReplicationUpdate(); OnDeath(KillingDamage, DamageEvent, Killer ? Killer->GetPawn() : NULL, DamageCauser); return true; }
void iGameEntity::Damage(float afDamage, int alStrength) { if(mfHealth > 0) { if(mType == eGameEntityType_Enemy) { //if(mpInit->mDifficulty== eGameDifficulty_Easy) afDamage *= 2.0f; if(mpInit->mDifficulty== eGameDifficulty_Hard) afDamage /= 2.0f; if(mpInit->mbHasHaptics) afDamage *= 2.0f; } int lDiff = mlToughness - alStrength; if(alStrength>=0) { float fDamageMul = 1 - (0.25f * (float)lDiff); if(fDamageMul<0) fDamageMul =0; //Could be 2 here, depends on what you wanna do. This way the damage is never increased. if(fDamageMul>1) fDamageMul =1; afDamage *= fDamageMul; } mfHealth -= std::abs(afDamage); if(mfHealth <=0) { OnDeath(afDamage); } else { OnDamage(afDamage); } } }
void Creature::OnDamage(float damage) { setHealth(getHealth() - damage); if(isDead()) OnDeath(); }
void AVehiclePawn::OnRep_Dying() { OnDeath(); }
void CGameStats::OnGameplayEvent(IEntity *pEntity, const GameplayEvent &event) { /* for(int i=0;i<gEventNamesNum;++i) { if(gEventNames[i].key == event.event) { CryLog("GameStats : Event %s",gEventNames[i].name); } }*/ int e_id = pEntity ? (int) pEntity->GetId() : 0; switch(event.event) { case eGE_GameStarted: StartGame(event.value!=0); break; case eGE_GameEnd: EndGame(event.value!=0); break; case eGE_SuddenDeath: SuddenDeath(event.value!=0); break; case eGE_RoundEnd: EndRound(event.value!=0, atoi(event.description)); break; case eGE_Renamed: SetName(e_id, event.description); break; case eGE_Scored: SetScore(e_id, event.description, (int)event.value); break; case eGE_Kill: OnKill(e_id, (EntityId*)event.extra); if(pEntity) ProcessPlayerStat(pEntity,event); break; case eGE_Death: OnDeath(e_id, (int)(TRUNCATE_PTR)event.extra); if(pEntity) ProcessPlayerStat(pEntity,event); break; case eGE_WeaponShot: case eGE_WeaponHit: case eGE_SuitModeChanged: case eGE_WeaponMelee: case eGE_LeftVehicle: case eGE_EnteredVehicle: case eGE_ItemSelected: case eGE_WeaponReload: case eGE_Damage: case eGE_Revive: case eGE_WeaponFireModeChanged: case eGE_ZoomedIn: case eGE_ZoomedOut: if(pEntity) ProcessPlayerStat(pEntity,event); break; case eGE_Connected: { bool restored = event.value!=0.0f; struct SExtraData { int status[2]; }; SExtraData* pExtra = static_cast<SExtraData*>(event.extra); NewPlayer(e_id, pExtra->status[0], pExtra->status[1]!=0, restored); } break; case eGE_ChangedTeam: SetTeam(e_id,(int)event.value); break; case eGE_Spectator: SetSpectator(e_id,(int)event.value); if(pEntity) ProcessPlayerStat(pEntity,event); break; case eGE_Disconnected: RemovePlayer(e_id, event.value!=0); break; case eGE_ScoreReset: ResetScore(e_id); break; case eGE_Rank: SetRank(e_id,(int)event.value); break; case eGE_GameReset: GameReset(); break; default: break; } }
uint32 Turret::ObjectMessageFn( HOBJECT hSender, ILTMessage_Read *pMsg ) { // Reset message to begining... pMsg->SeekTo( 0 ); uint32 dwMsgId = pMsg->Readuint32( ); switch( dwMsgId ) { case MID_DAMAGE : { uint32 dwMsgPos = pMsg->Tell( ); // Process base first so the dead flag gets set... uint32 dwRet = GameBase::ObjectMessageFn( hSender, pMsg ); if( m_Damage.IsDead( )) { OnDeath( ); } else { // Determine the percentage of health left on the turret... // This will be used to create certain ClientFX based on damage states... float fHealthPercent = 0.0f; if( m_Damage.GetMaxHitPoints( ) > 0.0f ) { fHealthPercent = m_Damage.GetHitPoints( ) / m_Damage.GetMaxHitPoints( ); } HATTRIBUTE hDamageStateStruct = g_pWeaponDB->GetAttribute( m_hTurret, WDB_TURRET_DamageState ); uint32 nNumDamageStates = g_pWeaponDB->GetNumValues( hDamageStateStruct ); uint32 nDamageState; for( nDamageState = 0; nDamageState < nNumDamageStates; ++nDamageState ) { // Run through the damage states and determine which ones to display... HATTRIBUTE hAttrib = g_pWeaponDB->GetStructAttribute( hDamageStateStruct, nDamageState, WDB_TURRET_fHealthPercent ); float fDamageStatePercent = g_pWeaponDB->GetFloat( hAttrib ); if( nDamageState > m_nCurDamageState && fDamageStatePercent >= fHealthPercent ) { m_nCurDamageState = nDamageState; } } // Send damage msg to operating client... CPlayerObj *pPlayer = dynamic_cast<CPlayerObj*>(g_pLTServer->HandleToObject( m_hOperatingObject )); if( pPlayer ) { CAutoMessage cMsg; cMsg.Writeuint8( MID_SFX_MESSAGE ); cMsg.Writeuint8( SFX_TURRET_ID ); cMsg.WriteObject( m_hObject ); cMsg.Writeuint8( kTurretFXMsg_Damage ); cMsg.Writeuint32( m_nCurDamageState ); g_pLTServer->SendToClient( cMsg.Read( ), pPlayer->GetClient( ), MESSAGE_GUARANTEED ); } } return dwRet; } break; } return GameBase::ObjectMessageFn( hSender, pMsg ); }