aboutsummaryrefslogtreecommitdiff
path: root/src/modules/m_cloak.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2023-06-06 00:57:07 +0100
committerGravatar Sadie Powell2023-06-06 01:02:14 +0100
commitacc9f5228f686ea816db38d8ecb1925adc053984 (patch)
tree3cdb53b7740689be56493f1929a03e6137ee4d09 /src/modules/m_cloak.cpp
parentMerge branch 'insp3' into master. (diff)
Allow secondary cloak methods to be used on link synchronisation.
If a server has a conditional cloak method (e.g. account) as the primary cloak method it doesn't make sense to use it for link consistency. With this change a secondary cloak method can request that it is used instead of the primary if the primary does not mark itself as link sensitive.
Diffstat (limited to 'src/modules/m_cloak.cpp')
-rw-r--r--src/modules/m_cloak.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/modules/m_cloak.cpp b/src/modules/m_cloak.cpp
index e94a3a33d..6b4dddad3 100644
--- a/src/modules/m_cloak.cpp
+++ b/src/modules/m_cloak.cpp
@@ -321,7 +321,21 @@ public:
if (cloakmethods.empty())
return;
- auto& cloakmethod = cloakmethods.front();
+ Cloak::MethodPtr cloakmethod;
+ for (const auto& method : cloakmethods)
+ {
+ if (method->IsLinkSensitive())
+ {
+ // This cloak method really wants to be the link method so prefer it.
+ cloakmethod = method;
+ break;
+ }
+ }
+
+ // If no methods are link sensitive we just use the first.
+ if (!cloakmethod)
+ cloakmethod = cloakmethods.front();
+
cloakmethod->GetLinkData(data, compatdata);
data["method"] = cloakmethod->GetName();