Comments about BetterCC http://war.curseforge.com/addons/bettercc/ The latest comments about BetterCC en-us Wed, 05 Nov 2008 00:29:44 +0000 CurseForge.com (http://www.curseforge.com) Comment #1 http://war.curseforge.com/addons/bettercc/?comment=1 <p>How to fix BetterCC:</p> <p>- Open up BetterCC.lua<br> - Replace with contents below:</p> <div class="code-wrapper" data-lexer="lua"><div class="markup-code"><pre><span class="cm">--[[--------------------------------------------------------------------------------------------------------------</span> <span class="cm">Copyright (c) 2008 Brad Bates</span> <span class="cm">Permission is hereby granted, free of charge, to any person</span> <span class="cm">obtaining a copy of this software and associated documentation</span> <span class="cm">files (the "Software"), to deal in the Software without</span> <span class="cm">restriction, including without limitation the rights to use,</span> <span class="cm">copy, modify, merge, publish, distribute, sublicense, and/or sell</span> <span class="cm">copies of the Software, and to permit persons to whom the</span> <span class="cm">Software is furnished to do so, subject to the following</span> <span class="cm">conditions:</span> <span class="cm">The above copyright notice and this permission notice shall be</span> <span class="cm">included in all copies or substantial portions of the Software.</span> <span class="cm">THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,</span> <span class="cm">EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES</span> <span class="cm">OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span> <span class="cm">NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT</span> <span class="cm">HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,</span> <span class="cm">WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING</span> <span class="cm">FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR</span> <span class="cm">OTHER DEALINGS IN THE SOFTWARE.</span> <span class="cm">--]]</span><span class="c1">--------------------------------------------------------------------------------------------------------------</span> <span class="n">BetterCC</span> <span class="o">=</span> <span class="p">{</span> <span class="n">COOLDOWN_GRANULARITY</span> <span class="o">=</span> <span class="mf">0.1</span><span class="p">,</span> <span class="p">}</span> <span class="kd">local</span> <span class="n">uiscale</span> <span class="o">=</span> <span class="n">InterfaceCore</span><span class="p">.</span><span class="n">GetScale</span><span class="p">()</span> <span class="kd">local</span> <span class="n">pulses</span> <span class="o">=</span> <span class="p">{}</span> <span class="kd">local</span> <span class="n">activePulses</span> <span class="o">=</span> <span class="p">{}</span> <span class="kd">local</span> <span class="n">DAY</span><span class="p">,</span> <span class="n">HOUR</span><span class="p">,</span> <span class="n">MINUTE</span><span class="p">,</span> <span class="n">SHORT</span> <span class="o">=</span> <span class="mi">86400</span><span class="p">,</span> <span class="mi">3600</span><span class="p">,</span> <span class="mi">60</span><span class="p">,</span> <span class="mi">5</span> <span class="c1">--values for time</span> <span class="kd">local</span> <span class="n">floor</span> <span class="o">=</span> <span class="nb">math.floor</span> <span class="kd">local</span> <span class="n">min</span><span class="p">,</span> <span class="n">max</span> <span class="o">=</span> <span class="nb">math.min</span><span class="p">,</span> <span class="nb">math.max</span> <span class="kd">local</span> <span class="n">OrigUpdateCooldownAnimation</span> <span class="k">function</span> <span class="nf">BetterCC</span><span class="p">.</span><span class="n">Initialize</span><span class="p">()</span> <span class="n">OrigUpdateCooldownAnimation</span> <span class="o">=</span> <span class="n">ActionButton</span><span class="p">.</span><span class="n">UpdateCooldownAnimation</span> <span class="ow">or</span> <span class="kc">false</span> <span class="n">ActionButton</span><span class="p">.</span><span class="n">UpdateCooldownAnimation</span> <span class="o">=</span> <span class="n">BetterCC</span><span class="p">.</span><span class="n">BetterCCAnim</span> <span class="k">end</span> <span class="k">function</span> <span class="nf">BetterCC</span><span class="p">.</span><span class="n">BetterCCAnim</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">timeElapsed</span><span class="p">,</span> <span class="n">updateCooldown</span><span class="p">,</span> <span class="p">...)</span> <span class="kd">local</span> <span class="n">BASE_ICON</span> <span class="o">=</span> <span class="mi">0</span> <span class="kd">local</span> <span class="n">BUTTON_TEXT</span> <span class="o">=</span> <span class="mi">1</span> <span class="kd">local</span> <span class="n">COOLDOWN</span> <span class="o">=</span> <span class="mi">2</span> <span class="kd">local</span> <span class="n">COOLDOWN_TIMER</span> <span class="o">=</span> <span class="mi">3</span> <span class="kd">local</span> <span class="n">FLASH_ANIM</span> <span class="o">=</span> <span class="mi">4</span> <span class="kd">local</span> <span class="n">ACTIVE_ANIM</span> <span class="o">=</span> <span class="mi">5</span> <span class="kd">local</span> <span class="n">GLOW_ANIM</span> <span class="o">=</span> <span class="mi">6</span> <span class="kd">local</span> <span class="n">STACK_COUNT_TEXT</span> <span class="o">=</span> <span class="mi">7</span> <span class="kd">local</span> <span class="n">cooldownFrame</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">m_Windows</span><span class="p">[</span><span class="n">COOLDOWN</span><span class="p">]</span> <span class="kd">local</span> <span class="n">timerFrame</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">m_Windows</span><span class="p">[</span><span class="n">COOLDOWN_TIMER</span><span class="p">]</span> <span class="kd">local</span> <span class="n">updateCooldown</span> <span class="o">=</span> <span class="n">updateCooldown</span> <span class="ow">or</span> <span class="n">self</span><span class="p">.</span><span class="n">m_RequiresFullUpdate</span> <span class="kd">local</span> <span class="n">m_Cooldown</span><span class="p">,</span> <span class="n">m_MaxCooldown</span><span class="p">,</span> <span class="n">isShown</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span><span class="p">,</span> <span class="n">self</span><span class="p">.</span><span class="n">m_MaxCooldown</span><span class="p">,</span> <span class="n">cooldownFrame</span><span class="p">:</span><span class="n">IsShowing</span><span class="p">()</span> <span class="k">if</span> <span class="n">OrigUpdateCooldownAnimation</span> <span class="k">then</span> <span class="n">OrigUpdateCooldownAnimation</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">timeElapsed</span><span class="p">,</span> <span class="n">updateCooldown</span><span class="p">,</span> <span class="p">...)</span> <span class="k">end</span> <span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span><span class="p">,</span> <span class="n">self</span><span class="p">.</span><span class="n">m_MaxCooldown</span> <span class="o">=</span> <span class="n">m_Cooldown</span><span class="p">,</span> <span class="n">m_MaxCooldown</span> <span class="n">cooldownFrame</span><span class="p">:</span><span class="n">Show</span><span class="p">(</span><span class="n">isShown</span><span class="p">)</span> <span class="k">if</span> <span class="p">(</span><span class="n">updateCooldown</span><span class="p">)</span> <span class="k">then</span> <span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span><span class="p">,</span> <span class="n">self</span><span class="p">.</span><span class="n">m_MaxCooldown</span> <span class="o">=</span> <span class="n">GetHotbarCooldown</span><span class="p">(</span><span class="n">self</span><span class="p">:</span><span class="n">GetSlot</span><span class="p">())</span> <span class="k">end</span> <span class="k">if</span> <span class="p">((</span><span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">m_MaxCooldown</span> <span class="o">&gt;</span> <span class="mi">2</span><span class="p">))</span> <span class="k">then</span> <span class="kd">local</span> <span class="n">oldTime</span> <span class="o">=</span> <span class="n">TimeUtils</span><span class="p">.</span><span class="n">FormatRoundedSeconds</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span><span class="p">,</span> <span class="n">BetterCC</span><span class="p">.</span><span class="n">COOLDOWN_GRANULARITY</span><span class="p">)</span> <span class="kd">local</span> <span class="n">updateLabel</span> <span class="o">=</span> <span class="kc">false</span> <span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span> <span class="o">-</span> <span class="n">timeElapsed</span> <span class="k">if</span> <span class="p">(</span><span class="n">TimeUtils</span><span class="p">.</span><span class="n">FormatRoundedSeconds</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span><span class="p">,</span> <span class="n">BetterCC</span><span class="p">.</span><span class="n">COOLDOWN_GRANULARITY</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">oldTime</span><span class="p">)</span> <span class="k">then</span> <span class="n">updateLabel</span> <span class="o">=</span> <span class="kc">true</span> <span class="k">end</span> <span class="k">if</span> <span class="p">(</span><span class="n">updateLabel</span> <span class="ow">or</span> <span class="n">updateCooldown</span><span class="p">)</span> <span class="k">then</span> <span class="kd">local</span> <span class="n">labelTime</span> <span class="k">if</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span> <span class="o">&gt;=</span> <span class="n">DAY</span><span class="p">)</span><span class="k">then</span> <span class="n">labelTime</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"</span><span class="s">%dd"</span><span class="p">,</span> <span class="n">floor</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span><span class="o">/</span><span class="n">DAY</span> <span class="o">+</span> <span class="mf">0.5</span><span class="p">))</span> <span class="k">elseif</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span> <span class="o">&gt;=</span> <span class="n">HOUR</span><span class="p">)</span><span class="k">then</span> <span class="n">labelTime</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"</span><span class="s">%dh"</span><span class="p">,</span> <span class="n">floor</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">m_Coodlown</span><span class="o">/</span><span class="n">HOUR</span> <span class="o">+</span> <span class="mf">0.5</span><span class="p">))</span> <span class="k">elseif</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span> <span class="o">&gt;=</span> <span class="n">MINUTE</span><span class="p">)</span><span class="k">then</span> <span class="n">labelTime</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"</span><span class="s">%d:%02d"</span><span class="p">,</span> <span class="n">floor</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span><span class="o">/</span><span class="mi">60</span><span class="p">),</span> <span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span> <span class="o">%</span> <span class="n">MINUTE</span><span class="p">)</span> <span class="k">else</span> <span class="n">labelTime</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span><span class="s2">"</span><span class="s">%d"</span><span class="p">,</span> <span class="n">floor</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span> <span class="o">+</span> <span class="mf">0.5</span><span class="p">))</span> <span class="k">end</span> <span class="n">timerFrame</span><span class="p">:</span><span class="n">SetText</span><span class="p">(</span><span class="n">labelTime</span><span class="p">)</span> <span class="n">timerFrame</span><span class="p">:</span><span class="n">SetFont</span><span class="p">(</span><span class="s2">"</span><span class="s">font_clear_medium_bold"</span><span class="p">,</span> <span class="n">WindowUtils</span><span class="p">.</span><span class="n">FONT_DEFAULT_TEXT_LINESPACING</span><span class="p">)</span> <span class="n">timerFrame</span><span class="p">:</span><span class="n">SetTextColor</span><span class="p">(</span><span class="mi">255</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="k">if</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span> <span class="o">&lt;=</span> <span class="mi">10</span><span class="p">)</span><span class="k">then</span> <span class="n">timerFrame</span><span class="p">:</span><span class="n">SetTextColor</span><span class="p">(</span><span class="mi">255</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="k">end</span> <span class="k">end</span> <span class="kd">local</span> <span class="n">newAlpha</span> <span class="o">=</span> <span class="mf">0.5</span> <span class="n">cooldownFrame</span><span class="p">:</span><span class="n">SetAlpha</span><span class="p">(</span><span class="n">newAlpha</span><span class="p">)</span> <span class="n">cooldownFrame</span><span class="p">:</span><span class="n">Show</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="k">elseif</span> <span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span> <span class="o">&lt;=</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">cooldownFrame</span><span class="p">:</span><span class="n">IsShowing</span><span class="p">())</span> <span class="k">then</span> <span class="n">cooldownFrame</span><span class="p">:</span><span class="n">SetAlpha</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="n">cooldownFrame</span><span class="p">:</span><span class="n">Show</span><span class="p">(</span><span class="kc">false</span><span class="p">)</span> <span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">self</span><span class="p">.</span><span class="n">m_MaxCooldown</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">BetterCC</span><span class="p">.</span><span class="n">StartPulseAnimation</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">self</span><span class="p">.</span><span class="n">m_Cooldown</span><span class="p">)</span> <span class="k">end</span> <span class="k">end</span> <span class="k">function</span> <span class="nf">BetterCC</span><span class="p">.</span><span class="n">CreateCooldownPulse</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="n">parent</span><span class="p">)</span> <span class="kd">local</span> <span class="n">pulse</span> <span class="o">=</span> <span class="n">frame</span> <span class="n">pulses</span><span class="p">[</span><span class="n">parent</span><span class="p">]</span> <span class="o">=</span> <span class="n">pulse</span> <span class="k">return</span> <span class="p">(</span><span class="n">pulse</span><span class="p">)</span> <span class="k">end</span> <span class="k">function</span> <span class="nf">BetterCC</span><span class="p">.</span><span class="n">StartPulseAnimation</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">timer</span><span class="p">)</span> <span class="c1">--d(info)</span> <span class="kd">local</span> <span class="n">texture</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">disabledTexture</span> <span class="o">=</span> <span class="n">GetIconData</span><span class="p">(</span><span class="n">info</span><span class="p">.</span><span class="n">m_IconNum</span><span class="p">)</span> <span class="k">if</span><span class="p">(</span><span class="n">texture</span><span class="p">)</span><span class="k">then</span> <span class="kd">local</span> <span class="n">pulse</span> <span class="o">=</span> <span class="n">pulses</span><span class="p">[</span><span class="n">info</span><span class="p">.</span><span class="n">m_Name</span><span class="p">]</span> <span class="ow">or</span> <span class="n">BetterCC</span><span class="p">.</span><span class="n">CreateCooldownPulse</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">info</span><span class="p">.</span><span class="n">m_Name</span><span class="p">)</span> <span class="k">if</span><span class="p">(</span><span class="n">pulse</span><span class="p">)</span> <span class="k">then</span> <span class="n">pulse</span><span class="p">.</span><span class="n">scale</span> <span class="o">=</span> <span class="mi">1</span> <span class="n">activePulses</span><span class="p">[</span><span class="n">pulse</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span> <span class="n">pulse</span><span class="p">:</span><span class="n">Show</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span> <span class="k">end</span> <span class="k">end</span> <span class="k">end</span> <span class="k">function</span> <span class="nf">BetterCC</span><span class="p">.</span><span class="n">UpdateAll</span><span class="p">(</span><span class="n">timePassed</span><span class="p">)</span> <span class="k">if</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">activePulses</span><span class="p">))</span><span class="k">then</span> <span class="k">for</span> <span class="n">k</span> <span class="k">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">activePulses</span><span class="p">)</span> <span class="k">do</span> <span class="n">BetterCC</span><span class="p">.</span><span class="n">UpdatePulse</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">timePassed</span><span class="p">)</span> <span class="k">end</span> <span class="k">end</span> <span class="k">end</span> <span class="k">function</span> <span class="nf">BetterCC</span><span class="p">.</span><span class="n">UpdatePulse</span><span class="p">(</span><span class="n">pulse</span><span class="p">,</span> <span class="n">timePassed</span><span class="p">)</span> <span class="kd">local</span> <span class="n">windowName</span> <span class="o">=</span> <span class="n">pulse</span><span class="p">.</span><span class="n">m_Name</span><span class="p">..</span><span class="s2">"</span><span class="s">ActionIcon"</span> <span class="kd">local</span> <span class="n">windowScale</span> <span class="o">=</span> <span class="n">WindowGetScale</span><span class="p">(</span><span class="n">pulse</span><span class="p">.</span><span class="n">m_Name</span><span class="p">)</span> <span class="k">if</span> <span class="n">pulse</span><span class="p">.</span><span class="n">scale</span> <span class="o">&gt;=</span> <span class="mi">2</span> <span class="k">then</span> <span class="n">pulse</span><span class="p">.</span><span class="n">dec</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">end</span> <span class="n">pulse</span><span class="p">.</span><span class="n">scale</span> <span class="o">=</span> <span class="n">max</span><span class="p">(</span><span class="n">min</span><span class="p">(</span><span class="n">pulse</span><span class="p">.</span><span class="n">scale</span> <span class="o">+</span> <span class="p">(</span><span class="n">pulse</span><span class="p">.</span><span class="n">dec</span> <span class="ow">and</span> <span class="o">-</span><span class="mi">1</span> <span class="ow">or</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">pulse</span><span class="p">.</span><span class="n">scale</span> <span class="o">*</span> <span class="p">(</span><span class="n">timePassed</span><span class="o">/</span><span class="mf">0.5</span><span class="p">),</span> <span class="mi">2</span><span class="p">),</span> <span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="n">pulse</span><span class="p">.</span><span class="n">scale</span> <span class="o">&lt;=</span> <span class="mi">1</span> <span class="k">then</span> <span class="n">activePulses</span><span class="p">[</span><span class="n">pulse</span><span class="p">]</span> <span class="o">=</span> <span class="kc">nil</span> <span class="n">pulse</span><span class="p">.</span><span class="n">dec</span> <span class="o">=</span> <span class="kc">nil</span> <span class="n">WindowSetAlpha</span><span class="p">(</span><span class="n">windowName</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="n">WindowClearAnchors</span><span class="p">(</span><span class="n">windowName</span><span class="p">)</span> <span class="n">WindowSetParent</span><span class="p">(</span><span class="n">windowName</span><span class="p">,</span> <span class="n">pulse</span><span class="p">.</span><span class="n">m_Name</span><span class="p">)</span> <span class="n">WindowAddAnchor</span><span class="p">(</span><span class="n">windowName</span><span class="p">,</span> <span class="s2">"</span><span class="s">center"</span><span class="p">,</span> <span class="n">pulse</span><span class="p">.</span><span class="n">m_Name</span><span class="p">,</span> <span class="s2">"</span><span class="s">center"</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="n">WindowSetLayer</span><span class="p">(</span><span class="n">windowName</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="n">WindowSetScale</span><span class="p">(</span><span class="n">windowName</span><span class="p">,</span> <span class="n">windowScale</span><span class="p">)</span> <span class="k">else</span> <span class="n">WindowSetAlpha</span><span class="p">(</span><span class="n">windowName</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span> <span class="n">WindowClearAnchors</span><span class="p">(</span><span class="n">windowName</span><span class="p">)</span> <span class="n">WindowSetParent</span><span class="p">(</span><span class="n">windowName</span><span class="p">,</span> <span class="s2">"</span><span class="s">Root"</span><span class="p">)</span> <span class="n">WindowAddAnchor</span><span class="p">(</span><span class="n">windowName</span><span class="p">,</span> <span class="s2">"</span><span class="s">center"</span><span class="p">,</span> <span class="n">pulse</span><span class="p">.</span><span class="n">m_Name</span><span class="p">,</span> <span class="s2">"</span><span class="s">center"</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="n">WindowSetLayer</span><span class="p">(</span><span class="n">windowName</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="n">WindowSetScale</span><span class="p">(</span><span class="n">windowName</span><span class="p">,</span> <span class="n">pulse</span><span class="p">.</span><span class="n">scale</span> <span class="o">*</span> <span class="n">windowScale</span><span class="p">)</span> <span class="k">end</span> <span class="k">end</span> </pre></div> </div><p>I take no ownership or responsibility for these edits.</p> Wed, 05 Nov 2008 00:29:44 +0000 http://war.curseforge.com/addons/bettercc/?comment=1 http://war.curseforge.com/addons/bettercc/?comment=1 no-reply@curseforge.com (Thrae)