Skip to content

Commit a36d2fe

Browse files
committed
Fix
1 parent 92271c6 commit a36d2fe

File tree

1 file changed

+57
-2
lines changed

1 file changed

+57
-2
lines changed

ChaosMod/Components/ZChaosManager.cpp

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,13 @@ void ZChaosManager::CheckAndAddEffects()
5959
effectData.CustomTime = effect->defaultTime / 1000;
6060
}
6161

62-
if ((!IsEffectEnabled || IsEffectEnabled(effect, false)))
62+
if ((!IsEffectEnabled || IsEffectEnabled(effect, false)) && effect->enabledManually)
6363
{
64-
g_dictEnabledEffects.emplace(effectId, effectData);
64+
if (!g_dictEnabledEffects.contains(effectId))
65+
{
66+
g_dictEnabledEffects.emplace(effectId, effectData);
67+
LOG("Effect " << effect->name << " has been enabled");
68+
}
6569
}
6670
else if (g_dictEnabledEffects.contains(effectId))
6771
{
@@ -222,6 +226,57 @@ void ZChaosManager::OnRun()
222226

223227
void ZChaosManager::OnModPauseCleanup()
224228
{
229+
for (int i = 0; i < m_iEffectCount; ++i)
230+
{
231+
ZChaosEffect *effect = m_rgEffectsArray[i];
232+
233+
if (!effect)
234+
{
235+
LOG("No effect at index " << i);
236+
continue;
237+
}
238+
239+
std::ostringstream oss;
240+
oss << "zchaos_" << i << "_";
241+
char *ptr = effect->name;
242+
for (char c = *ptr; c; c = *++ptr)
243+
{
244+
if ('a' <= c && c <= 'z')
245+
{
246+
oss << c;
247+
}
248+
if ('A' <= c && c <= 'Z')
249+
{
250+
oss << (char)(c - 'A' + 'a');
251+
}
252+
}
253+
254+
std::string effectId = oss.str();
255+
256+
EffectData effectData;
257+
effectData.Name = effect->name;
258+
effectData.Id = effectId;
259+
effectData.TimedType = effect->m_OnTick ? EEffectTimedType::Custom : EEffectTimedType::NotTimed;
260+
if (effect->m_OnTick)
261+
{
262+
effectData.CustomTime = effect->defaultTime / 1000;
263+
}
264+
265+
if (g_dictEnabledEffects.contains(effectId))
266+
{
267+
g_dictEnabledEffects.erase(effectId);
268+
}
269+
270+
if (auto reg = GetRegisteredEffect(effectId))
271+
{
272+
g_RegisteredEffects.erase(std::remove_if(g_RegisteredEffects.begin(), g_RegisteredEffects.end(),
273+
[effectId](RegisteredEffect e)
274+
{ return e.GetIndentifier().GetEffectId() == effectId; }),
275+
g_RegisteredEffects.end());
276+
}
277+
}
278+
279+
225280
m_rgEffectsArray = 0;
226281
m_iEffectCount = 0;
227282
}

0 commit comments

Comments
 (0)