Last active
January 10, 2021 11:08
-
-
Save gaogao-9/09469d2afc2609ba94814bdc4be5b421 to your computer and use it in GitHub Desktop.
原神の理想聖遺物検証をしました。結論としては→ https://twitter.com/gaogao_9/status/1348187555179581440
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
// バーバラ, ジン, ショウリ, 刻晴 | |
const キャラ攻撃力 = [160, 239, 251, 323]; | |
// ☆3/38, ☆3/40, ☆4/41, ☆4/44, ☆5/46, ☆5/48 | |
const 武器攻撃力 = [356, 447, 455, 565, 608, 674]; | |
const 基礎攻撃力一覧 = キャラ攻撃力.flatMap((x) => 武器攻撃力.map((y) => ({ | |
キャラ攻撃力: x, | |
武器攻撃力: y, | |
基礎攻撃力: x + y, | |
}))); | |
// 会心率系 | |
const キャラ会心率 = 5; | |
const キャラ会心ダメージ = 50; | |
// 武器サブOP | |
// サブOPなし, 弓蔵, 狼の末路 | |
const 武器サブOP攻撃力 = [0, 41.3, 49.6]; | |
// サブOPなし, 黒剣, 四風原典 | |
const 武器サブOP会心率 = [0, 27.6, 33.1]; | |
// サブOPなし, 黎明の神剣, 流浪楽章 | |
const 武器サブOP会心ダメージ = [0, 46.9, 55.1]; | |
const 武器サブOP組み合わせ = (基礎攻撃力) => [ | |
...武器サブOP攻撃力.map((攻撃力割合) => ({ | |
攻撃力: 基礎攻撃力 * (攻撃力割合 / 100), | |
会心率: 0, | |
会心ダメージ: 0, | |
})), | |
...武器サブOP会心率.map((会心率) => ({ | |
攻撃力: 0, | |
会心率, | |
会心ダメージ: 0, | |
})), | |
...武器サブOP会心ダメージ.map((会心ダメージ) => ({ | |
攻撃力: 0, | |
会心率: 0, | |
会心ダメージ, | |
})), | |
].filter((x, i, self) => self | |
.findIndex(y => (x.攻撃力 === y.攻撃力) && (x.会心率 === y.会心率) && (x.会心ダメージ === y.会心ダメージ)) === i); | |
// 聖遺物関連 | |
const サブOP数値中央値 = { | |
攻撃力: 17, | |
攻撃力割合: 5, | |
会心率: 3.3, | |
会心ダメージ: 6.6, | |
}; | |
const 花羽杯OP組み合わせ = (基礎攻撃力) => { | |
const 攻撃力割合実効値 = 基礎攻撃力 * サブOP数値中央値.攻撃力割合 / 100; | |
const サブOP攻撃力 = (攻撃力割合実効値 > サブOP数値中央値.攻撃力) ? 攻撃力割合実効値 : サブOP数値中央値.攻撃力; | |
const サブOP会心率 = サブOP数値中央値.会心率; | |
const サブOP会心ダメージ = サブOP数値中央値.会心ダメージ; | |
return ([ | |
[1 * 3, 1 * 3, 4 * 3], | |
[1 * 3, 4 * 3, 1 * 3], | |
[4 * 3, 1 * 3, 1 * 3], | |
[2 * 3, 2 * 3, 2 * 3], | |
]).map(([攻撃力回数, 会心率回数, 会心ダメージ回数]) => ({ | |
メイン: { | |
攻撃力: 311, | |
会心率: 0, | |
会心ダメージ: 0, | |
}, | |
サブ: { | |
攻撃力: { | |
回数: 攻撃力回数, | |
数値: サブOP攻撃力 * 攻撃力回数, | |
}, | |
会心率: { | |
回数: 会心率回数, | |
数値: サブOP会心率 * 会心率回数, | |
}, | |
会心ダメージ: { | |
回数: 会心ダメージ回数, | |
数値: サブOP会心ダメージ * 会心ダメージ回数, | |
}, | |
}, | |
})); | |
}; | |
const 砂冠OP組み合わせ = (基礎攻撃力) => { | |
const 攻撃力割合実効値 = 基礎攻撃力 * サブOP数値中央値.攻撃力割合 / 100; | |
const メインOP攻撃力 = 基礎攻撃力 * (46.6 / 100); | |
const メインOP会心率 = 31.1; | |
const メインOP会心ダメージ = 62.2; | |
const サブOP攻撃力 = (攻撃力割合実効値 > サブOP数値中央値.攻撃力) ? 攻撃力割合実効値 : サブOP数値中央値.攻撃力; | |
const サブOP会心率 = サブOP数値中央値.会心率; | |
const サブOP会心ダメージ = サブOP数値中央値.会心ダメージ; | |
return ([ | |
[1, 1, 10, "会心率"], | |
[1, 10, 1, "会心ダメージ"], | |
[1, 5, 6, "会心系"], | |
[1, 6, 5, "会心系"], | |
[5, 1, 6, "会心率"], | |
[5, 6, 1, "会心ダメージ"], | |
[5, 3, 4, "会心系"], | |
[5, 4, 3, "会心系"], | |
[4, 4, 4, "会心系"], | |
]).flatMap(([攻撃力回数, 会心率回数, 会心ダメージ回数, 冠OP]) => { | |
const OPパターンリスト = { | |
会心系: [[メインOP会心率, 0], [0, メインOP会心ダメージ]], | |
会心率: [[メインOP会心率, 0]], | |
会心ダメージ: [[0, メインOP会心ダメージ]], | |
}[冠OP]; | |
return OPパターンリスト.map(([メインOP会心率, メインOP会心ダメージ]) => ({ | |
メイン: { | |
攻撃力: メインOP攻撃力, | |
会心率: メインOP会心率, | |
会心ダメージ: メインOP会心ダメージ, | |
}, | |
サブ: { | |
攻撃力: { | |
回数: 攻撃力回数, | |
数値: サブOP攻撃力 * 攻撃力回数, | |
}, | |
会心率: { | |
回数: 会心率回数, | |
数値: サブOP会心率 * 会心率回数, | |
}, | |
会心ダメージ: { | |
回数: 会心ダメージ回数, | |
数値: サブOP会心ダメージ * 会心ダメージ回数, | |
}, | |
}, | |
})); | |
}); | |
}; | |
const result = []; | |
for(const 基礎攻撃力 of 基礎攻撃力一覧) { | |
const 武器サブOP一覧 = 武器サブOP組み合わせ(基礎攻撃力.基礎攻撃力); | |
const 聖遺物サブOP数値リスト = 花羽杯OP組み合わせ(基礎攻撃力.基礎攻撃力) | |
.flatMap(p1 => 砂冠OP組み合わせ(基礎攻撃力.基礎攻撃力).map(p2 => ({ | |
花羽杯: p1, | |
砂冠: p2, | |
}))); | |
for(const 武器サブOP of 武器サブOP一覧) { | |
let 最高ダメージ指数 = { | |
実数値: -1, | |
基礎攻撃力: null, | |
聖遺物: null, | |
武器サブOP: null, | |
}; | |
for(const { 花羽杯, 砂冠 } of 聖遺物サブOP数値リスト) { | |
const 実効攻撃力 = 基礎攻撃力.基礎攻撃力 + 武器サブOP.攻撃力 + 花羽杯.メイン.攻撃力 + 花羽杯.サブ.攻撃力.数値 + 砂冠.メイン.攻撃力 + 砂冠.サブ.攻撃力.数値; | |
const 実効会心率 = Math.min(100, キャラ会心率 + 武器サブOP.会心率 + 花羽杯.メイン.会心率 + 花羽杯.サブ.会心率.数値 + 砂冠.メイン.会心率 + 砂冠.サブ.会心率.数値); | |
const 実効会心ダメージ = キャラ会心ダメージ + 武器サブOP.会心ダメージ + 花羽杯.メイン.会心ダメージ + 花羽杯.サブ.会心ダメージ.数値 + 砂冠.メイン.会心ダメージ + 砂冠.サブ.会心ダメージ.数値; | |
const ダメージ指数 = 実効攻撃力 * (1 + (実効会心ダメージ / 100) * (実効会心率 / 100)); | |
if(最高ダメージ指数.実数値 > ダメージ指数) continue; | |
最高ダメージ指数 = { | |
実数値: ダメージ指数, | |
基礎攻撃力, | |
聖遺物: { | |
花羽杯, | |
砂冠, | |
}, | |
武器サブOP, | |
実効攻撃力, | |
実効会心率, | |
実効会心ダメージ, | |
実効会心レート: 実効会心ダメージ / 実効会心率, | |
}; | |
} | |
result.push(最高ダメージ指数); | |
} | |
} | |
result | |
.sort((a, b) => a.実数値 - b.実数値) | |
.sort((a, b) => a.基礎攻撃力.武器攻撃力 - b.基礎攻撃力.武器攻撃力) | |
.sort((a, b) => a.基礎攻撃力.キャラ攻撃力 - b.基礎攻撃力.キャラ攻撃力); | |
for(const 最高ダメージ指数 of result) { | |
console.log(最高ダメージ指数.基礎攻撃力.基礎攻撃力.toFixed(0), 最高ダメージ指数.基礎攻撃力.キャラ攻撃力.toFixed(0), 最高ダメージ指数.基礎攻撃力.武器攻撃力.toFixed(0), 最高ダメージ指数.実効攻撃力.toFixed(0), 最高ダメージ指数.実効会心率.toFixed(0), 最高ダメージ指数.実効会心ダメージ.toFixed(0), 最高ダメージ指数.実効会心レート.toFixed(2), 最高ダメージ指数.実数値.toFixed(0), 最高ダメージ指数.聖遺物, 最高ダメージ指数.武器サブOP); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment