From 3f3c5d9215758273efde9d752905e1f412705f53 Mon Sep 17 00:00:00 2001 From: Aaron Kimbre Date: Sat, 24 Dec 2022 11:44:14 -0600 Subject: [PATCH] buff immunities --- dGame/dComponents/BuffComponent.cpp | 27 +++++++++++++++++++++++++-- dGame/dComponents/BuffComponent.h | 5 +++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/dGame/dComponents/BuffComponent.cpp b/dGame/dComponents/BuffComponent.cpp index 2f8705eb..3089d179 100644 --- a/dGame/dComponents/BuffComponent.cpp +++ b/dGame/dComponents/BuffComponent.cpp @@ -45,8 +45,30 @@ void BuffComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUp } } - outBitStream->Write0(); // buff immunities - } + if (m_BuffImmunities.empty()) { + outBitStream->Write0(); + } else { + outBitStream->Write1(); + outBitStream->Write(m_BuffImmunities.size()); + + for (const auto& buffImmunity : m_BuffImmunities) { + outBitStream->Write(buffImmunity.first); + outBitStream->Write(buffImmunity.second.time); + outBitStream->Write(buffImmunity.second.cancelOnDeath); + outBitStream->Write(buffImmunity.second.cancelOnZone); + outBitStream->Write(buffImmunity.second.cancelOnDamaged); + outBitStream->Write(buffImmunity.second.cancelOnRemoveBuff); + outBitStream->Write(buffImmunity.second.cancelOnUi); + outBitStream->Write(buffImmunity.second.cancelOnLogout); + outBitStream->Write(buffImmunity.second.cancelOnUnequip); + outBitStream->Write(buffImmunity.second.cancelOnDamageAbsDone); + outBitStream->Write0(); // outBitStream->Write(addedByTeammate) + outBitStream->Write(buffImmunity.second.applyOnTeammates); + // if (addedByTeammate) outBitStream->Write(team mate lwoobjid); + outBitStream->Write(buffImmunity.second.refcount); + } + } + } // there is no update serilization, only on initialization } void BuffComponent::Update(float deltaTime) { @@ -300,6 +322,7 @@ void BuffComponent::UpdateXml(tinyxml2::XMLDocument* doc) { } for (const auto& buff : m_Buffs) { + if (buff.second.cancelOnLogout || buff.second.cancelOnZone) continue; auto* buffEntry = doc->NewElement("b"); buffEntry->SetAttribute("id", buff.first); diff --git a/dGame/dComponents/BuffComponent.h b/dGame/dComponents/BuffComponent.h index 1f9dfe79..d66cbc73 100644 --- a/dGame/dComponents/BuffComponent.h +++ b/dGame/dComponents/BuffComponent.h @@ -147,6 +147,11 @@ private: */ std::map m_Buffs; + /** + * The currently active buff immunities + */ + std::map m_BuffImmunities; + /** * Parameters (=effects) for each buff */