Elin(エリン)、装備生成とエンチャント付与の仕組みについて、コード解析ベースでの解説を行い、生成Lvや品質決定の計算式や、強い装備を集める方法について考察しています。
最終更新:2025/12/24
強い装備を掘るには?ざっくりまとめ
- 生成Lvからエンチャント強度が計算
- 大きいほど強いエンチャント
- エンチャント抽選回数:
- 高品質:0~2回
- 奇跡:3~5回
- 神器:5~7回
- アーティファクト:1~2回
- ダブりの場合、エンチャントは合算
- キャラ生成時の装備:キャラLv
- 装備を持たない『』死亡時の装備:キャラLv
- 商人:ショップLv
- ショップLv = 街の発展度 + 投資規模 x 1.1(商人ギルド6の場合)
- 再構築:アイテムの元の生成Lv、Lv、プレイヤーの最深到達階層から最も高いもの
- 再構築の巻物側の処理の問題でgenLvは半減
- ネフィアの床落ち:マップ危険度
- 願い:10 + power/4
- 井戸:50 + 黒猫のよだれ * 50のパワー
- 杖:100 * (1 + 魔道具 * 0.1 + 魔力 * 0.005 + 感覚 * 0.005)のパワー
- ボス宝箱:ボスのLv
- 床落ち宝箱:ネフィアやマップ危険度
- 宝の地図の宝箱:宝の地図のマップLvで変動
- ボス宝箱産:ボスのLv
- 床落ち宝の地図産:マップのLv
- ロイテルマート産:ロイテルマートLv依存
- 住人の仕事産:採集スキルLv
- Lvが高いモンスターを倒す
- 祠《争い》でイスの偉大なる種族、螺旋の王(すくつスケーリングなら危険度の約3倍のLv)
- ネフィアボス
- ビッグダディ
- ボス産宝の地図
- 商人:ブラックマーケットや舶来商人
- 奇跡、神器の生成確率UP
- アーティファクトを強化したい:祝福された再構築の巻物
- マイナスエンチャントが欲しい:呪われた再構築の巻物
装備品生成の仕組み
モンスターの生成時や、死亡時処理やショップの品揃え更新、再構築の巻物などでthingGen.Createが呼ばれます。これがアイテム生成部分になります。
例えば以下のような流れです。(自分用に注目すべきクラス名やメソッド名を記載しておきます)
- モンスター生成時:Card.OnCreate(キャラ生成) -> Chara.RestockEquip(キャラの装備生成) -> EQ_CAT(カテゴリから装備生成) -> ThingeGen.CreateFromCategory -> ThingGen.Create
- モンスター死亡時:Card.SpawnLoot(死亡時のドロップ処理) -> ThingGen.CreateFromFilter -> ThingGen.Create
- 商人:trait.onBarter(品揃え更新) -> trait.createStock(アイテム1個1個の生成処理) -> ThingGen.CreateFromFilter -> ThingGen.Create
- 再構築:LayerDragGrid.CreateReconstruction(再構築の巻物UI表示) -> ActEffect.Proc(巻物効果発動) -> ThingGen.Create
- 井戸願い:traitWell.trySetAct(井戸を飲んだ処理) -> ActEffect.Proc(魔法効果の発動) -> ActEffect.Wish(願い処理) -> ThingGen.Create
装備品の生成処理部分
ThingGen.Createには、以下のような処理が書いてあります。
装備品のレアリティ決定
if (sourceCard.quality != 0)
{
rarity = sourceCard.quality.ToEnum<Rarity>();
}
else if (bp.rarity != Rarity.Random)
{
rarity = bp.rarity;
}
......
if (rarity != 0 && category.tag.Contains("fixedRarity"))
{
rarity = Rarity.Normal;
}
生成アイテムが呼び出し元でレアリティ指定されたり、品質固定の場合、呼び出し元の指定や品質固定に従います。
それ以外の場合は、乱数を発生させてレアリティを決定します。
else if ((category.slot != 0 && category.slot != 45 && category.slot != 44) || category.tag.Contains("randomRarity"))
{
if (EClass.rnd(10) == 0)
{
rarity = Rarity.Crude;
}
else if (EClass.rnd(10) == 0)
{
rarity = Rarity.Superior;
}
else if (EClass.rnd(80) == 0)
{
rarity = Rarity.Legendary;
}
else if (EClass.rnd(250) == 0)
{
rarity = Rarity.Mythical;
}
}
各品質ごとに以下のような抽選率になります。
| 条件 | |
|---|---|
| 粗悪(Crude) | 1/10 |
| 高品質(Superior) | 上記に外れた上で1/10 |
| 奇跡(Legendary) | 上記に外れた上で1/80 |
| 神器(Mythical) | 上記に外れた上で1/250 |
| 通常(Normal) | 全てのレアリティ抽選に外れた場合 |
品質は装備品のダイスやPV・DV、エンチャント抽選数に影響します。
粗悪(Crude)はダイスやPV・DVが悪いのみで、以降の処理はNormalと同じです。
また、粗悪(Crude)品質はゲーム内では表示されないようです。
各種装備生成経路からのレアリティ指定
呼び出し元によってはレアリティが指定さて、ランダムなレアリティ決定がありません。
以下、レアリティ指定のある装備生成経路とその抽選率の例です。
| 条件 | |
|---|---|
| 装備を持たない『』キャラの装備生成 (Chara.SpawnLoot) | (神器)1/30 それ以外は奇跡 |
| 自宅に呼んだブラックマーケット(舶来商人) (Trait.CreateStock) | (神器)1 / 150 (奇跡)1 / 30 (高品質)1 / 5 |
| 願い (ActEffect.proc) | 奇跡固定 |
| キャラクターの装備生成 (chara.EQ_CAT) | キャラクターの品質に依存(『』や《》)) |
| ネフィアボス落ち宝箱 (ThingGen.CreateTreasure) | ボスLvに応じて抽選(高品質 -> 奇跡 -> 神器) ボスLvが高いほど奇跡品質になりやすい 奇跡抽選後、(神器)1/20抽選 クエストボスの場合は神器1個確定 |
| 宝の地図生成の宝箱 (ThingGen.CreateTreasure) | ボス宝箱と同じ処理 Lvはmap.Lvを使用 |
| 通常の店売りアイテム (Trait.) | レアリティ指定無し |
呪い・祝福処理
if (bp.blesstedState.HasValue)
{
SetBlessedState(bp.blesstedState.GetValueOrDefault());
}
アイテムのcreate処理以前に祝福、呪い、堕落、あるいは通常が付与されていたならそれを適用します。
else if (base.category.ignoreBless == 0 && bp.rarity == Rarity.Random && base.rarity != Rarity.Artifact)
{
if (EClass.rnd(25) == 0)
{
SetBlessedState(BlessedState.Blessed);
}
else if (EClass.rnd(25) == 0)
{
SetBlessedState(BlessedState.Cursed);
}
else if (EClass.rnd(50) == 0 && base.category.slot != 0)
{
SetBlessedState(BlessedState.Doomed);
}
}
そうでない場合、乱数を取って結果で祝福、呪い、堕落を抽選します。
| 条件 | |
|---|---|
| 祝福 | 1/25 |
| 呪い | 祝福に外れた上で1/25 |
| 堕落 | 呪いに外れた上で1/50 かつ装備品カテゴリ |
| 祝福・呪い無し | それ以外の場合 |
なお、一部生成経路では祝福・呪いの処理がされません。
エンチャント付与回数の決定
if (base.category.slot != 0)
{
int num = 0;
if (base.rarity == Rarity.Superior)
{
num = EClass.rnd(3);
}
else if (base.rarity == Rarity.Legendary)
{
num = EClass.rnd(4) + 2;
}
else if (base.rarity == Rarity.Mythical)
{
num = EClass.rnd(3) + 5;
}
else if (base.rarity >= Rarity.Artifact)
{
num = EClass.rnd(2) + 1;
}
......
}
その後、生成アイテムが装備品だった場合、レアリティに応じてエンチャント付与回数を決定します。
レアリティごとに以下のようなエンチャント抽選回数です。
| エンチャント回数 | |
|---|---|
| 高品質 | 0~2 |
| 奇跡 | 3~5 |
| 神器 | 5~7 |
| アーティファクト | 1~2 |
エンチャント付与回数を決定し終わったらaddEnchant関数を呼び出し、エンチャント付与が行われます。
また、この際、神々のアーティファクトやエンチャント付与タグなしの装備品はこの処理に入りません。
if (num > 0 && !HasTag(CTAG.godArtifact) && !HasTag(CTAG.noRandomEnc))
{
for (int i = 0; i < num; i++)
{
AddEnchant(genLv);
}
}
エンチャント生成部分の解説
addEnchantは1回呼ばれる毎にエンチャントを追加していきます。
具体的なエンチャント付与処理は以下の通りです。
重み付き抽選の準備
long num2 = lv + 5 + EClass.rndSqrt(10);
foreach (SourceElement.Row row in EClass.sources.elements.rows)
{
if ((!neg || !row.tag.Contains("flag")) && func(row) && row.LV < num2)
{
list.Add(row);
num += row.chance;
}
}
- num2にgenLv + 5 + 乱数を代入します。これは生成Lvが低い装備品に特定のエンチャを付与しないための措置です。
- SourceElement.rowをForEachで回し、カテゴリやnum2の条件に合ったエンチャントを抽選リストに追加していきます。
- 特定のエンチャントは装備品の生成Lvが一定以上でないと出現しません。(衝撃波無効 = 75Lvや魔法強化=30lv等)
- sourceGame.XLSXのLV列が該当エンチャントのLVで、num2がこれ以上でないと抽選されません。
- 各エンチャントにはchanceという値が設定されています。
- chanceが大きいほど抽選されやすいエンチャントという意味です。(例:デフォルト = 1000、衝撃波無効 = 50、全特効 = 30など)
重み付き抽選
int num3 = EClass.rnd(num);
int num4 = 0;
foreach (SourceElement.Row item in list)
{
num4 += item.chance;
if (num3 < num4)
{
......(エンチャント強度計算部分、後述)
}
}
- 重み付き抽選を行います。
- num3を0 ~ num0(chanceの累積)で乱数発生させます。
- 該当区間のエンチャントであれば、エンチャント付与処理に入ります。
エンチャントの付与
float num5 = 3f + Mathf.Min(lv / 10, 15f) + Mathf.Sqrt(lv * item.encFactor / 100);
int num6 = (item.mtp + EClass.rnd(item.mtp + (int)num5)) / item.mtp * ((!(flag && neg)) ? 1 : (-1));
if (item.encFactor == 0 && num6 > 25)
{
num6 = 25;
}
- 計算式はコードの通りです。
- num5 = 3 + (生成レベル/10あるいは15のうち低い方) + (生成Lv x encFactor / 100のルート)
- num6 = mtp + (0 ~ (mtp + num5)で乱数) / mtp
- num6が最終的なエンチャント強度になります。
- エンチャントのencFactorが0の場合、num6の上限は25になります。(ランダム抽選されるエンチャントにencFactor=0のものは無し)
- エンチャント強度は各種エンチャントのマスクデータ(mtpやencFactor)で補正されます
- 例:魔法強化はencfactor25、主能力はencfactor80
- Lv(アイテム生成時に渡される生成Lv)が高いほど高強度のエンチャントが付く可能性があります
- エンチャント付与時、mtp ~ 上限までの乱数を取っています
- 等確率なので、上限値の半分付近の強度が出やすいです
- 呪われたアイテムならば、付与されるエンチャント数値がマイナス化する可能性があります
encFactor、mtpについては各エンチャントによって異なるのでsourceGame.XLSX側にある記載を参照ください。
具体的には、生成Lv(genLv)、encFactor、mtpがわかっていれば、エンチャント強度の最大値を計算できます。
1億敵からの各種主要エンチャントの生成強度は以下の記事にまとめています。
エンチャントの多重抽選
エンチャントの多重抽選を防止する処理は書いていないので、同じエンチャントが2回、3回抽選された場合、強度は加算されていきます。
例:魔法強化100 + 魔法強化100 + 魔法強化100 で合計300
生成Lv(genLv)の決定
thingGen.Create(装備生成する関数)ではgenLvという変数が登場し、エンチャント強度や、付与されるエンチャント種類の制限に使われています。
アイテム生成Lvですが、各種生成ルートによって以下のように決定されています。(ここも読み込んできたが長いので省略。また、一部未調査)
- キャラ生成時の装備:キャラLv
- 装備を持たない『』死亡時の装備:キャラLv
- 商人:ショップLv
- ショップLv = 街の発展度 + 投資規模 x 1.1(商人ギルド6の場合)
- 再構築:アイテムの元の生成Lv、Lv、プレイヤーの最深到達階層から最も高いもの
- 再構築の巻物側の処理の問題でgenLvは半減
- ネフィアの床落ち:ネフィア危険度(おそらく)
- 願い:10 + power/4
- 井戸:50 + 黒猫のよだれ * 50のパワー
- 杖:100 * (1 + 魔道具 * 0.1 + 魔力 * 0.005 + 感覚 * 0.005)のパワー
- ボス宝箱:ボスのLv
- 宝の地図の宝箱:マップのLv
- ボス宝箱のマップLv:10 + (ボスLv/2 ~ ボスLv)
- 床落ちのマップLv:マップの危険度(おそらく)
- ロイテルマートの地図:ショップLv (10 + 10 * ロイテルマートLv(現在の上限は2))
現在主要な装備集め方法については精査してきましたが、そうでないものは未調査なので今後の課題とします。
装備生成とエンチャント強度まとめ
- 生成Lvからエンチャント強度が計算
- 大きいほど強いエンチャント
- エンチャント抽選回数:
- 高品質:0~2回
- 奇跡:3~5回
- 神器:5~7回
- アーティファクト:1~2回
- ダブりの場合、エンチャントは合算
- キャラクター生成時の装備:キャラクターのLv
- キャラクター死亡時の装備:キャラクターのLv
- 商人:ショップLv
- 街の発展度 + 投資規模 x 1.1(商人ギルド6の場合)
- 再構築:アイテムの元の生成Lv、Lv、プレイヤーの最深到達階層から最も高いもの
- 再構築の巻物側の処理の問題でgenLvは半減
- ネフィアボスの宝箱:ボスのLv
- 宝の地図:入手経路によって生成Lvが変動
- ネフィアの床落ち:ネフィア危険度(おそらく)
- 祠《争い》:イスの偉大なる種族、螺旋の王は危険度の約3倍のLvで生成
- ブラックマーケットや舶来商人では奇跡、神器の生成確率UP
- (神器)1 / 150
- (奇跡)1 / 30
- (高品質)1 / 5
- アーティファクトを強化したいなら再構築の巻物
今回の記事に記載していない分については以下にコード解析や実体験ベースのものを載せています。
商人でのアイテム生成
再構築の巻物:
エンチャント計算:
genLv1億装備、genLv20億装備:

コメント