Skip to content

Instantly share code, notes, and snippets.

@gaogao-9
Last active January 10, 2021 11:08
Show Gist options
  • Save gaogao-9/09469d2afc2609ba94814bdc4be5b421 to your computer and use it in GitHub Desktop.
Save gaogao-9/09469d2afc2609ba94814bdc4be5b421 to your computer and use it in GitHub Desktop.
原神の理想聖遺物検証をしました。結論としては→ https://twitter.com/gaogao_9/status/1348187555179581440
{
// バーバラ, ジン, ショウリ, 刻晴
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