Elin:解析/戰鬥

From Ylvapedia
Revision as of 05:33, 3 December 2024 by Nightwhisper (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

評價列表

價值# 元素 備註
(92) 貫通
(108) 投擲
(132) 戰術
(133) 射擊
(305) 魔道具
(411) 魔法強化附魔
(482) 強力武器
(1400) 專長: 武器精通 1, 2
(1404) 專長:遠程精通 1, 2

武器命中機制

右邊展開

Updated EA23.46

"曲線"是指遊戲為技能值的有效性添加滑動曲線的方法

CURVE( input, start, step, rate)
if input <= start
return input

repeat x10
{
 num = start + repeatindex * step
	if input <= num
	return input
else
	input = num = (input - num) * rate /100
}
return input

首先系統評估攻擊者的"命中"和目標的"閃避"

根據所使用武器的類型(投擲武器、遠程武器、近戰武器、武術武器)和風格,"命中"值的計算方式有所不同

命中
武器類型 計算
投擲 Curve([攻擊者的靈巧]/4 + [攻擊者的力量]/2 + [攻擊者的武器等級], 50, 25, 75) + 75 (250 if not PC Faction)
武術 (無盾) Curve([攻擊者的靈巧]/3 + [攻擊者的力量]/3 + [攻擊者的武器等級], 50, 25, 75) + 50
武術(有盾) 75% of Curve([攻擊者的靈巧]/3 + [攻擊者的力量]/3 + [攻擊者的武器等級], 50, 25, 75) + 50
手杖 Curve([攻擊者的意志]/4 + [攻擊者武器的主要屬性]/3 [攻擊者的武器等級], 50, 25, 75) + 100
其他 Curve([攻擊者的靈巧]/4 + [攻擊者武器的主要屬性]/3 [攻擊者的武器等級], 50, 25, 75) + 50

然後將你的裝備和武器的命中修正值加到上面 (然後對遠程武器套用距離修改器)

閃避的計算依據為 Curve([目標的感知] / 3 + [目標的閃避技能], 50, 10, 75) + [目標的DV] + 25


然後按以下順序修改這些值,並產生複合效果:

修飾符
狀態 影響
攻擊者有災禍 命中 = 75%
攻擊者在高處 命中 +20%
攻擊者正在騎乘 命中 = 命中 * 100 / (100 + 500 / higher of(5 or 10 + [攻擊者的騎術]))
攻擊者正在託管 命中 = 命中 * 100 / (100 + 1000 / higher of(5 or 10 + [攻擊者的共生技能]))
攻擊者被騎乘 命中 = 命中 * 100 / (100 + 1000 / higher of(5 or 10 + [攻擊者的力量]))
攻擊者是寄生者 命中 = 命中 * 100 / (100 + 1000 / higher of(5 or 10 + [攻擊者的靈巧]))
攻擊是兩隻手 命中 = 命中 + 25 + sqrt([攻擊者的雙手技能] * 2)
攻擊為雙持 命中 = 命中 * 100 / (115 * 15 * (2000 / (20 + [攻擊者的雙持技能])[限制在 0-100])
攻擊者是致盲 命中 = 33.33% (如果是遠程/投擲則為 10%)
目標是致盲 閃避 = 50%
目標是黑暗 閃避 = 50%
目標在高處 閃避 + 20%

現在系統有了命中和閃避值,它使用這些值來計算攻擊是否按此順序命中、未擊中或暴擊

IF 目標是黑暗 且 四分之一的機會
   暴擊
IF 目標已死亡 或 正在睡覺
   暴擊
IF [目標的強效閃避] * 10 > 命中
   num = 閃避 * 100 / 命中
   IF 'num2' > 300 & 隨機 0 到 ([目標的強效閃避]+250) > 100
	未擊中
   IF 'num2' > 200 & 隨機 0 到 ([目標的強效閃避]+250) > 150
	未擊中
   IF 'num2' > 150 & 隨機 0 到 ([目標的強效閃避]+250) > 200
	未擊中
IF [目標完美閃避] > 隨機 0 - 99
   未擊中
IF 1 in 20
   命中
IF 1 in 20
   未擊中
IF 命中 < 1
   未擊中
IF 閃避 < 1
   命中
IF 隨機 0 - 命中 < 隨機 0 - (閃避 * 125 (如為遠程則150) / 100)
   未擊中
IF 隨機 0 - 5000 < [攻擊者的感知]
   暴擊
IF [攻擊者的暴擊技能] + sqrt([攻擊者的心眼技能]) > 隨機 0 -200
   暴擊
IF 攻擊者有[死亡之心]
   num = 100 - [攻擊者當前HP] * 100 / [攻擊者最大HP]
   IF num >= 50 & (num^3 / 3) > 隨機 0 - 100000000
      暴擊
命中

武術

else if (this.IsMartial || this.IsMartialWeapon)
{
    this.weaponSkill = this.CC.elements.GetOrCreateElement(100);
    this.attackType = (this.CC.race.meleeStyle.IsEmpty() ? ((EClass.rnd(2) == 0) ? AttackType.Kick : AttackType.Punch) : this.CC.race.meleeStyle.ToEnum(true));
    this.dBonus = this.CC.DMG + this.CC.encLV + (int)Mathf.Sqrt((float)(this.CC.STR / 5 + this.weaponSkill.Value / 4));
    this.dNum = 2 + Mathf.Min(this.weaponSkill.Value / 10, 4);
    this.dDim = 5 + (int)Mathf.Sqrt((float)(this.weaponSkill.Value / 3));
    this.dMulti = 0.6f + (float)(this.CC.STR / 2 + this.weaponSkill.Value / 2 + this.CC.Evalue(132) / 2) / 50f;
    this.dMulti += 0.05f * (float)this.CC.Evalue(1400);
    this.toHitBase = EClass.curve(this.CC.DEX / 3 + this.CC.STR / 3 + this.weaponSkill.Value, 50, 25, 75) + 50;
    this.toHitFix = this.CC.HIT;
    if (this.attackStyle == AttackStyle.Shield)
    {
        this.toHitBase = this.toHitBase * 75 / 100;
    }
    this.penetration = Mathf.Clamp(this.weaponSkill.Value / 10 + 5, 5, 20) + this.CC.Evalue(92);
    if (this.IsMartialWeapon)
    {
        this.dBonus += this.weapon.DMG;
        this.dNum += this.weapon.source.offense[0];
        this.dDim = Mathf.Max(this.dDim / 2 + this.weapon.c_diceDim, 1);
        this.toHitFix += this.weapon.HIT;
        this.penetration += this.weapon.Penetration;
        if (!this.weapon.source.attackType.IsEmpty())
        {
            this.attackType = this.weapon.source.attackType.ToEnum(true);
        }
    }
}

玩家使用武術技能踢或拳。玩家將根據近戰風格或角色規格踢或拳。

傷害由 武術、力量、靈巧、魅力值 決定

傷害骰子為 2+(武術/10,最大為 d6

骰子的傷害值為 5+√(武術/3)。

傷害倍數為 0.6 + ((力量 / 2 + 武術 / 2 + 戰術 / 2) / 50.0)。

如果玩家擁有武器精通專長,則會以 0.05x(武器精通等級)的倍率提供額外傷害。(實際上是 +0.05 或 +0.10)

準確度為((力量/3+靈巧/3+武術)+50)),最小值為25+50,最大值為75+50 . 如果玩家揮舞著盾牌,則會有-25%向下調整。

貫通以(武術/10)+5計算,最小為5%,最大為20%+貫通

如果使用武術武器:

傷害加值是你的空手傷害加值 + 武器的 傷害加值

骰子數是你的空手骰子數+武器的 骰子數

骰子面數是你的空手骰子面數/2+武器的 骰子面數

骰子數是你的空手骰子數+武器的 骰子數

命中獎勵是你的空手命中獎勵 + 武器的 命中獎勵

穿透就是你空手貫穿+武器的 貫穿

投擲

if (this.isThrow)
{
    bool flag = this.weapon.HasTag(CTAG.throwWeapon) || this.weapon.HasTag(CTAG.throwWeaponEnemy);
    int num2 = (int)Mathf.Clamp(Mathf.Sqrt((float)(this.weapon.SelfWeight + this.weapon.ChildrenWeight)) * 3f + 25f + (float)(flag ? 75 : 0), 10f, 400f + Mathf.Sqrt((float)this.CC.STR) * 50f);
    int num3 = Mathf.Clamp(this.weapon.material.hardness, flag ? 40 : 20, 200);
    this.weaponSkill = this.CC.elements.GetOrCreateElement(108);
    this.attackType = AttackType.Blunt;
    this.dBonus = (this.CC.IsPCParty ? 3 : 7);
    this.dNum = 2;
    this.dDim = ((this.CC.IsPCParty ? 0 : this.CC.LV) + this.CC.STR + this.CC.Evalue(108)) * num2 * num3 / 10000 / 2;
    this.dMulti = 1f;
    this.toHitBase = EClass.curve(this.CC.DEX / 4 + this.CC.STR / 2 + this.weaponSkill.Value, 50, 25, 75) + (this.CC.IsPC ? 75 : 250);
    this.toHitFix = this.CC.HIT + this.weapon.HIT;
    this.penetration = 25;
}

玩家從手中投擲物品,返回或不使用投擲技能。

攻擊類型始終是 鈍器

重量值為 √投擲物品重量 x 3 + 如果' 是投擲武器:75,否則為 0,下限 10 到上限' 400 + √(力量x 50)

材料值為材料硬度,下限為如果為投擲武器:40,否則為0,上限為200

骰子數始終為 2

骰子面數為 (如果不是玩家角色:角色等級 + 力量 + 投擲 ) x 重量值 x 材料值/ 10000 / 2

準確度為 (靈巧 / 4 + 力量 / 2 + 投擲),最小值為 25+50,最大值為 75+50 + (如果是玩家角色: 75 否則 250 )

命中獎勵是角色命中獎勵+武器的 命中獎勵

傷害加成為如果是玩家角色:3,否則為 7

傷害倍數總是1

貫通始終為25


近戰與遠程

else
{
    if (this.IsRanged)
    {
        this.weaponSkill = this.CC.elements.GetOrCreateElement(this.toolRange.WeaponSkill);
    }
    else
    {
        this.weaponSkill = this.CC.elements.GetOrCreateElement(this.weapon.category.skill);
    }
    if (!this.weapon.source.attackType.IsEmpty())
    {
        this.attackType = this.weapon.source.attackType.ToEnum(true);
    }
    bool flag2 = this.IsCane || this.weapon.Evalue(482) > 0;
    if (flag2)
    {
        this.weaponSkill = this.CC.elements.GetOrCreateElement(305);
    }
    this.dBonus = this.CC.DMG + this.CC.encLV + this.weapon.DMG;
    this.dNum = this.weapon.source.offense[0];
    this.dDim = this.weapon.c_diceDim;
    this.dMulti = 0.6f + (float)(this.weaponSkill.GetParent(this.CC).Value + this.weaponSkill.Value / 2 + this.CC.Evalue(flag2 ? 304 : (this.IsRanged ? 133 : 132))) / 50f;
    this.dMulti += 0.05f * (float)this.CC.Evalue(this.IsRanged ? 1404 : 1400);
    this.toHitBase = EClass.curve((this.IsCane ? this.CC.WIL : this.CC.DEX) / 4 + this.weaponSkill.GetParent(this.CC).Value / 3 + this.weaponSkill.Value, 50, 25, 75) + 50;
    this.toHitFix = this.CC.HIT + this.weapon.HIT;
    this.penetration = this.weapon.Penetration + this.CC.Evalue(92);
    if (this.IsCane)
    {
        this.toHitBase += 50;
    }
}
if (this.ammo != null)
{
    this.dNumAmmo = ((this.ammo.source.offense.Length != 0) ? this.ammo.source.offense[0] : 0);
    this.dDimAmmo = this.ammo.c_diceDim;
    this.dBonusAmmo = this.ammo.DMG;
    if (this.dNumAmmo < 1)
    {
        this.dNumAmmo = 1;
    }
    if (this.dDimAmmo < 1)
    {
        this.dDimAmmo = 1;
    }
    this.dBonus += this.ammo.DMG;
    this.toHitFix += this.ammo.HIT;
}
else
{
    this.dNumAmmo = 0;
    this.dDimAmmo = 0;
}

玩家使用戰術技能揮舞近戰武器或使用射擊技能射擊遠程武器

如果武器是「手杖」或具有「原力武器」結界,則它使用「魔道具」技能而不是戰術或射擊技能

傷害加成為“玩家角色傷害加成”+“武器模組工具傷害加成”+“武器傷害加成”

傷害倍數為0.6 + (武器 主要屬性 + 武器 技能/ 2 + (如果是近戰武器戰術, 如果是遠程武器 神射手 如果是手杖或強力武器 魔道具)) / 50

如果玩家擁有武器/遠程精通專長,則會以 0.05 x(武器/遠程精通等級)的倍率提供額外傷害。 (實際上是 +0.05 或 +0.10)

準確度為(靈巧手杖或力量武器意志)/ 4 + 武器技能 / 3 +(如果是近戰武器戰術,如果是遠程武器射擊,如果是手杖或力量武器魔法裝置),最小值為25+50 最多為 75+50

如果是手杖準確度額外+ 50

命中獎勵是角色命中獎勵+武器命中獎勵+彈藥命中獎勵(如果裝有彈藥)

傷害加成為角色傷害加成+武器傷害加成+彈藥傷害加成(如果裝填彈藥)

貫通為角色貫通+武器貫通

施法/法術能量

public override int GetPower(Card c)
{
    int num = base.Value * 8 + 50;
    if (!c.IsPC)
    {
        num = Mathf.Max(num, c.LV * 6 + 30);
    }
    num = EClass.curve(num, 400, 100, 75);
    if (this is Spell)
    {
        num = num * (100 + c.Evalue(411)) / 100;
    }
    return num;
}
public static int curve(int a, int start, int step, int rate = 75)
{
    if (a <= start)
    {
        return a;
    }
    for (int i = 0; i < 10; i++)
    {
        int num = start + i * step;
        if (a <= num)
        {
            return a;
        }
        a = num + (a - num) * rate / 100;
    }
    return a;
}

如果是玩家角色,法術強度為 curve( (法術等級 x 8 + 50), 400, 100, 75 ) x (100 + 法術增強附魔) / 100

法術強度是「法術等級」x 8 + 50 或「人物等級」x 6 + 30 之間較大的一個,它不是玩家角色

關於曲線函數: curve(a,start,step,rate)

設定i = 0。計算num = start + i * step。當a超過num時,超出的部分需要乘以rate / 100。然後將i增加1。

簡單來說,這個函數是用來壓縮數值的。函數曲線的斜率逐漸減少到(rate / 100)^10

施法/傷害法術

類型 骰子數量 骰子面數 傷害加成 備註
觸摸 1+法術力量/100+屬性/10 3+法術力量/50 近戰範圍
箭矢 1+法術力量/160+屬性/30 8+法術力量/12 法術力量/25 單一目標
箭束 1+法術力量/120+屬性/20 4+法術力量/20 對直線10格內的所有目標造成傷害
球狀法術 1+法術力量/70+屬性/20 2+法術力量/35 對施法者為中心,半徑5格內的所有目標造成傷害

傷害 = 傷害 x 100 / (90 + 距離 x 10)

瘴氣 2+法術力量/150 5+法術力量/80 每回合造成一次傷害
吐息 1+法術力量/80+屬性/20 6+法術力量/100 屬性/4 對施法者為中心,長7格,角度35°的扇形內所有目標造成傷害
隕石 1+法術力量/150 4+屬性*3 永遠屬於火焰元素

對施法者為中心,半徑10格內的所有目標造成傷害 可被牆壁阻擋 也會對施法者造成傷害

地震 5+法術力量/30 10+屬性/3 永遠屬於衝擊元素

對施法者為中心,半徑12格內的所有目標造成傷害 對具有重力減益狀態的敵人造成雙倍最大骰子傷害 對具有漂浮效果的敵人造成一半傷害

破碎詛咒 1+法術力量/160+屬性/30 8+法術力量/12 法術力量/25 移除目標身上的所有詛咒,並對周圍的敵人造成傷害。

需要目標身上至少有一個詛咒才能生效。

施法/治療法術

類型 骰子數量 骰子面數 治療加成 備註
輕傷治癒 1+法術力量/50+意志/30 5+法術力量/40 法術力量/30
重傷治癒 2+法術力量/40+意志/25 6+法術力量/30 法術力量/25
致命傷治癒 3+法術力量/35+意志/20 7+法術力量/25 法術力量/20
治療術 4+法術力量/30+意志/15 8+法術力量/20 法術力量/15
《艾莉絲》的治癒 5+法術力量/25+意志/10 9+法術力量/15 法術力量/10
《歐蒂娜》的治癒 6+法術力量/20+意志/5 10+法術力量/10 法術力量/5
《朱亞》的治癒 8+法術力量/10+意志 15+法術力量/5 法術力量
自然擁抱 1+法術力量/125 4+法術力量/75

施法/召喚法術

case EffectId.Funnel:
{
    if (EClass._zone.CountMinions(CC) > CC.MaxSummon || CC.c_uidMaster != 0)
    {
        CC.Say("summon_ally_fail", CC, null, null);
        return;
    }
    CC.Say("spell_funnel", CC, element.Name.ToLower(), null);
    CC.PlaySound("spell_funnel", 1f, true);
    Chara chara = CharaGen.Create("bit", -1);
    chara.SetMainElement(element.source.alias, element.Value, true);
    chara.SetSummon(20 + power / 20 + EClass.rnd(10));
    chara.SetLv(power / 15);
    EClass._zone.AddCard(chara, tp.GetNearestPoint(false, false, true, false));
    chara.PlayEffect("teleport", true, 0f, default(Vector3));
    chara.MakeMinion(CC, MinionType.Default);
    return;
}
類型 持續時間 等級 備註
召喚碎片 20 + 隨機(20) + 法術力量 / 20 法術力量 / 15
召喚動物 直到死亡 法術等級 * (100 + 法術力量 / 10) / 100 + 法術力量 / 30
召喚不死妹妹 直到死亡 法術等級 * (100 + 法術力量 / 10) / 100 + 法術力量 / 30
召喚陰影 直到死亡 法術力量 / 10 + 1 使用自爆攻擊

請注意,除了「碎片」以外的召喚物,其持續時間均為無限。