<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>闪耀星骑士 on 洗洁精使</title><link>https://xxfttkx.github.io/tags/%E9%97%AA%E8%80%80%E6%98%9F%E9%AA%91%E5%A3%AB/</link><description>Recent content in 闪耀星骑士 on 洗洁精使</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Example Person</copyright><lastBuildDate>Fri, 31 Jul 2026 00:28:56 +0800</lastBuildDate><atom:link href="https://xxfttkx.github.io/tags/%E9%97%AA%E8%80%80%E6%98%9F%E9%AA%91%E5%A3%AB/index.xml" rel="self" type="application/rss+xml"/><item><title>闪耀星骑士的伤害计算</title><link>https://xxfttkx.github.io/p/%E9%97%AA%E8%80%80%E6%98%9F%E9%AA%91%E5%A3%AB%E7%9A%84%E4%BC%A4%E5%AE%B3%E8%AE%A1%E7%AE%97/</link><pubDate>Fri, 31 Jul 2026 00:28:56 +0800</pubDate><guid>https://xxfttkx.github.io/p/%E9%97%AA%E8%80%80%E6%98%9F%E9%AA%91%E5%A3%AB%E7%9A%84%E4%BC%A4%E5%AE%B3%E8%AE%A1%E7%AE%97/</guid><description>&lt;p>wiki上的&lt;a class="link" href="https://twinklestarknights.wikiru.jp/?%E3%83%80%E3%83%A1%E3%83%BC%E3%82%B8%E8%A8%88%E7%AE%97%E5%BC%8F" target="_blank" rel="noopener"
>ダメージ計算式&lt;/a>基本算是完全正确，这里结合逆向的代码随意解释分析一下。&lt;/p>
&lt;p>&lt;code>出発前ATK&lt;/code>是&lt;code>TSKBattleNote$$GetBaseAttack&lt;/code>，也是在有着&lt;code>出击&lt;/code>的编队界面点点右上角的反转按钮能看到的ATK数值。&lt;/p>
&lt;p>&lt;code>出発前ATK&lt;/code>与&lt;code>ATK倍率（加算倍率）&lt;/code>计算后的ATK是&lt;code>TSKBattleNote$$GetAttack&lt;/code>，也就是战斗中选技能前你能看到的ATK数值。&lt;/p>
&lt;p>&lt;code>EXスキル倍率(A)&lt;/code>可以通过&lt;code>TSKBattleCalculationManager$$CaluculationNormalDamage&lt;/code>的args[4]获取。&lt;/p>
&lt;p>&lt;code>クリティカルダメージ倍率(B)&lt;/code>通过&lt;code>TSKBattleCalculationManager.CriticalOffset(...args)&lt;/code>获取；同时该函数可以了解是否暴击: &lt;code>const isCritilal = args[0];&lt;/code>。&lt;/p>
&lt;p>&lt;code>属性ダメージ倍率(C)&lt;/code>通过&lt;code>TSKBattleCalculationManager.AttributeOffset(...args)&lt;/code>获取。&lt;/p>
&lt;p>&lt;code>スタンダメージ倍率(D)&lt;/code>通过&lt;code>TSKBattleCalculationManager.DownOffset(...args)&lt;/code>获取。&lt;/p>
&lt;p>&lt;code>被ダメージ増減倍率(E)&lt;/code>理论是会在&lt;code>TSKBattleNote$$GetDamageRateValue&lt;/code>的代码中，但我没找到，不过可以通过defencer的&lt;code>unit.field(&amp;quot;skillEffectList&amp;quot;).value as Il2Cpp.Object;&lt;/code>得到所有SkillEffect，其中targer==&lt;code>SkillType.DmgUpAllyRateBit&lt;/code>的就是易伤值，&lt;code>effect.field(&amp;quot;&amp;lt;SkillEffectValue&amp;gt;k__BackingField&amp;quot;)&lt;/code>得到的&lt;code>effectValue=3000&lt;/code>就代表30%，List中可能有多个易伤，相加就行了，别忘了最后加上1。（该SkillEffect中还有个&lt;code>value=600&lt;/code>的值，意义不明）&lt;/p>
&lt;p>&lt;code>デバフダメージ倍率(F) &lt;/code>是在&lt;code>TSKBattleNote$$GetDamageRateValue&lt;/code>中计算的。典型的&lt;code>［霹靂の射手］梨緒&lt;/code>赋予的是&lt;code>標的&lt;/code>，50%额外易伤，SkillEffect的形式是&lt;code>SkillType.Target&lt;/code>，&lt;code>effect 13: type=Target time=16 value=5000 effectValue=0&lt;/code>，这里就存在&lt;code>effect.field(&amp;quot;&amp;lt;SkillValue1&amp;gt;k__BackingField&amp;quot;)&lt;/code>，和上述的易伤（E）存在&lt;code>class TSKBattleSkillData&lt;/code>中不同的变量，很变态，不知道它这样做的理由。然后各个属性的&lt;code>融解&lt;/code>，&lt;code>極冷&lt;/code>以及各个&lt;code>攻撃タイプ&lt;/code>的&lt;code>裂傷&lt;/code>，&lt;code>破砕&lt;/code>等专属易伤没仔细看，不过代码中都有，似乎是直接相加，&lt;code>TSKBattleNote$$GetDamageRateValue&lt;/code>中搜索&lt;code>TSKBattleNote$$GetSkillEffect&lt;/code>都能找到，例如&lt;code>TSKBattleNote$$GetSkillEffect(param_1,0x1a7,0);&lt;/code>，423对应&lt;code>SkillType.Collapse&lt;/code>。（16进制-&amp;gt;10进制-&amp;gt;enum-&amp;gt;英文-&amp;gt;日语，要对应谁是谁太头大了，虽然可以通过上面代码的&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl"> if (((*(longlong *)(attacker + 0x10) != **(longlong **)(IntPtr_TypeInfo + 0xb8)) &amp;amp;&amp;amp;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (*(longlong *)(attacker + 0x98) != 0)) &amp;amp;&amp;amp;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (*(int *)(*(longlong *)(attacker + 0x98) + 0x34) == 5))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>来定位attacker的属性和攻击类型，但也看的很累；且这里翻译完马上就忘了。&lt;/p>
&lt;p>（这里去查了下，&lt;code>attacker + 0x98&lt;/code>是&lt;code>private TSKBattleUnit &amp;lt;UnitData&amp;gt;k__BackingField; //Field offset: 0x98&lt;/code>，&lt;code>TSKBattleUnit&lt;/code>的&lt;code>+0x34&lt;/code>是&lt;code>private int &amp;lt;AttrType&amp;gt;k__BackingField; //Field offset: 0x34&lt;/code>，AttrType==5是什么意思呢，让我猜猜，&lt;code>Collapse&lt;/code>的中文翻译是&lt;code>坍塌&lt;/code>，日文翻译是&lt;code>崩壊&lt;/code>，看来它是对应&lt;code>崩壊: 闇属性から受けるダメージ&lt;/code>。好恶心好恶心。）&lt;/p>
&lt;p>&lt;code>ラッシュ倍率(G)&lt;/code>通过&lt;code>TSKBattleCalculationManager.RushOffset(...args)&lt;/code>获取。一般情况的上限是&lt;code>RushOffset = 6.699999809265137&lt;/code>，与wiki中的&lt;code>ただし、RUSH倍率はRUSH101の+570%で頭打ちになるようで、そこから先はどれだけRUSH数を伸ばしても倍率は変わらない&lt;/code>一致。&lt;/p>
&lt;p>&lt;code>ダメージBOOST(H)&lt;/code>没找，它目前是&lt;code>討伐イベント&lt;/code>特有的，一般也用不上。&lt;/p>
&lt;p>&lt;code>被ダメージカット率(I) &lt;/code>没找到，不过有在&lt;code>TSKBattleNote$$GetDamageRateValue&lt;/code>中看到如下代码：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl"> dVar16 = ceil((double)((float)damage * ((float)(longlong)iVar12 / (float)iVar11)));
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> damage = damage + (longlong)dVar16;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> if (damage &amp;lt; 1) {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> damage = 1;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> return damage;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>只有它会导致伤害为1，所以大抵具体计算也在该函数中。&lt;/p>
&lt;p>&lt;code>乱数(J)&lt;/code>通过&lt;code>TSKBattleCalculationManager.FluctuationOffset&lt;/code>获取。我测试下来也是&lt;code>1.00倍～1.01倍(100%～101%)&lt;/code>&lt;/p>
&lt;p>&lt;code>ユニゾンアタック&lt;/code>不讲，这个应该不能暴击。&lt;/p>
&lt;p>总之 Damage = ATK * A * B * &amp;hellip; * I * J。去寻找你所爱的乘区吧。&lt;/p></description></item></channel></rss>