void AVehiclePawn::Die()
{
	if (CanDie())
	{
		OnDeath();
	}
}
Esempio n. 2
0
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());
	}
}
Esempio n. 3
0
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;
}
Esempio n. 6
0
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;
}
Esempio n. 7
0
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;
}
Esempio n. 8
0
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();
}
Esempio n. 11
0
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;
	}
}
Esempio n. 12
0
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 );
}