//------------------------------------------------------------------------ void CGameRules::ServerHit(const HitInfo &hitInfo) { if (my->CallHook( "OnEntityDamage", oohh::GetEntityFromId(hitInfo.targetId), oohh::GetEntityFromId(hitInfo.weaponId), oohh::GetEntityFromId(hitInfo.shooterId), hitInfo.damage, hitInfo.pos, hitInfo.dir )) { if (true) return; } if (m_processingHit) { m_queuedHits.push(hitInfo); return; } ++m_processingHit; ProcessServerHit(hitInfo); while (!m_queuedHits.empty()) { HitInfo info(m_queuedHits.front()); ProcessServerHit(info); m_queuedHits.pop(); } --m_processingHit; }
//------------------------------------------------------------------------ void CGameRules::ServerHit(const HitInfo &hitInfo) { HitInfo info(hitInfo); if (IItem *pItem=gEnv->pGame->GetIGameFramework()->GetIItemSystem()->GetItem(info.weaponId)) { if (CWeapon *pWeapon=static_cast<CWeapon *>(pItem->GetIWeapon())) { float distance=0.0f; if (IEntity *pEntity=gEnv->pEntitySystem->GetEntity(info.shooterId?info.shooterId:info.weaponId)) { distance=(pEntity->GetWorldPos()-info.pos).len2(); if (distance>0.0f) distance=cry_sqrtf_fast(distance); } info.damage=pWeapon->GetDamage(info.fmId, distance); if (info.type!=GetHitTypeId(pWeapon->GetDamageType(info.fmId))) { info.damage=0; } } } if (m_processingHit) { m_queuedHits.push(info); return; } ++m_processingHit; ProcessServerHit(info); while (!m_queuedHits.empty()) { HitInfo qinfo(m_queuedHits.front()); ProcessServerHit(qinfo); m_queuedHits.pop(); } --m_processingHit; }
//------------------------------------------------------------------------ void CGameRules::ServerHit(const HitInfo &hitInfo) { if (m_processingHit) { m_queuedHits.push(hitInfo); return; } ++m_processingHit; ProcessServerHit(hitInfo); while (!m_queuedHits.empty()) { HitInfo info(m_queuedHits.front()); ProcessServerHit(info); m_queuedHits.pop(); } --m_processingHit; }