void CTronPlayerObj::HandleDamage(const DamageStruct& damage) { if ( WMGR_INVALID_ID != damage.nAmmoId ) { // hit by a weapon of some sort if ( IsDefending() ) { // send a message to the player detailing a successful block CAutoMessage cMsg; LTRESULT ltResult; cMsg.Writeuint8( MID_PROJECTILE ); // write the projectile message subtype cMsg.Writeuint8( MPROJ_BLOCKED ); // write the defense type cMsg.Writeuint8( m_cDefendType ); // write the defense percentage cMsg.Writefloat( GetDefensePercentage( &damage.vDir ) ); ltResult = g_pLTServer->SendToClient( cMsg.Read(), m_hClient, MESSAGE_GUARANTEED ); ASSERT( LT_OK == ltResult ); } } CPlayerObj::HandleDamage( damage ); }
bool CTronPlayerObj::FilterDamage( DamageStruct *pDamageStruct ) { // DANO: for testing float fOrigDamage = pDamageStruct->fDamage; if ( IsDefending() ) { // player is defending, attenuate the damage to take float fDefenseModifier = GetDefensePercentage( &pDamageStruct->vDir ); pDamageStruct->fDamage *= ( 1.0f - fDefenseModifier ); } // pass the filter up the hierarchy return CPlayerObj::FilterDamage( pDamageStruct ); }
void Game_Battler::AddState(int state_id) { const RPG::State* state = ReaderUtil::GetElement(Data::states, state_id); if (!state) { Output::Warning("AddState: Can't add state with invalid ID %d", state_id); return; } if (IsDead()) { return; } if (state_id == 1) { SetGauge(0); RemoveAllStates(); SetCharged(false); SetHp(0); SetAtkModifier(0); SetDefModifier(0); SetSpiModifier(0); SetAgiModifier(0); SetIsDefending(false); SetCharged(false); attribute_shift.clear(); attribute_shift.resize(Data::attributes.size()); } std::vector<int16_t>& states = GetStates(); if (state_id - 1 >= static_cast<int>(states.size())) { states.resize(state_id); } states[state_id - 1] = 1; // Clear states that are more than 10 priority points below the // significant state const RPG::State* sig_state = GetSignificantState(); for (size_t i = 0; i < states.size(); ++i) { if (Data::states[i].priority <= sig_state->priority - 10) { states[i] = 0; } } if (IsDefending() && GetSignificantRestriction() != RPG::State::Restriction_normal) { SetIsDefending(false); } }