ギアシードチェッカーのこちらのページを参考にしました。
一応ちゃんと動きます。


目次
サンプルコード
class SeedChecker
def initialize(seed, brand, drink = nil)
@seed = seed
@brand = brand
@drink = drink
end
def show_gear_powers
seed = @seed
# 次に付くギアパワーを10個表示する
10.times do
# 共通処理
# シードを一つ進めてからギアパワーをつける
seed = advance_seed(seed)
gear_power = get_next_gear_power(seed)
# ドリンクが有効な場合には以下の処理を追加
if @drink
# シードを100で割った余りが29以下であれば、ドリンクのギアパワーをつける
# つまり、30%の確率でドリンクのギアパワーがつく
if seed % 0x64 <= 0x1D
p @drink
next
end
# シードを100で割った余りが30以上であれば
# さらにシードを一つ進めてからドリンク以外のギアパワーをつける
seed = advance_seed(seed);
gear_power = get_next_gear_power_with_drink(seed);
end
p gear_power
end
end
private
# XORSHIFT32のアルゴリズムで、シードを一つ進める
def advance_seed(seed)
seed = seed ^ (seed << 13 & 0xFFFFFFFF)
seed = seed ^ (seed >> 17 & 0xFFFFFFFF)
seed = seed ^ (seed << 5 & 0xFFFFFFFF)
return seed & 0xFFFFFFFF
end
# 次付くギアパワーを計算
def get_next_gear_power(seed)
seed_mod = seed % max_gear_power_weight
gear_power_index = -1
# 「シードをギアパワーの重みの合計で割った余り」が0を下回るまで、ギアパワーの重みを順番に引いていく
while (seed_mod >= 0)
gear_power_index += 1
gear_power_name = gear_power_order[gear_power_index]
seed_mod -= get_gear_power_weight(gear_power_name)
end
return gear_power_order[gear_power_index]
end
# ドリンク有効な場合に次付くギアパワーを計算
def get_next_gear_power_with_drink(seed)
seed_mod = seed % max_gear_power_weight_with_drink
gear_power_index = -1
while (seed_mod >= 0)
gear_power_index += 1
gear_power_name = gear_power_order[gear_power_index]
seed_mod -= get_gear_power_weight_with_drink(gear_power_name)
end
return gear_power_order[gear_power_index]
end
# ギアパワーの重みの合計
# 中立ギアは2*14=28
# 非中立ギアは (2*12)+1+10=35
def max_gear_power_weight
return 28 if brand[:isNeutral]
return 35
end
# ドリンク有効な場合の、ギアパワーの重みの合計
# 中立ギアは28-2=26
# 非中立ギアの付きやすいギアパワーとドリンクが同じ場合は35-10=25
# 非中立ギアの付きづらいギアパワーとドリンクが同じ場合は35-1=34
# それ以外の中立ギアは35-2=33
def max_gear_power_weight_with_drink
return 26 if brand[:isNeutral]
return 25 if brand[:UsualGearPowerName] == @drink
return 34 if brand[:UnusualGearPowerName] == @drink
return 33
end
# ギアパワーの重み
# ブランドの付きやすいギアパワーは10
# ブランドの付きづらいギアパワーは1
# それ以外は2
def get_gear_power_weight(gear_power_name)
return 10 if (brand[:UsualGearPowerName] == gear_power_name)
return 1 if (brand[:UnusualGearPowerName] == gear_power_name)
return 2
end
# ドリンク有効な場合のギアパワーの重み
# ドリンクと同じギアパワーは0(ドリンク以外のギアパワーをつけるため、スキップされる)
# それ以外は上と同じ
def get_gear_power_weight_with_drink(gear_power_name)
return 0 if (gear_power_name == @drink)
return 10 if (brand[:UsualGearPowerName] == gear_power_name)
return 1 if (brand[:UnusualGearPowerName] == gear_power_name)
return 2
end
# ギアパワーの並び
def gear_power_order
[
"メイン効率アップ",
"サブ効率アップ",
"インク回復力アップ",
"ヒト移動速度アップ",
"イカダッシュ速度アップ",
"スペシャル増加量アップ",
"スペシャル減少量ダウン",
"スペシャル性能アップ",
"復活時間短縮",
"スーパージャンプ時間短縮",
"サブ性能アップ",
"相手インク影響軽減",
"サブ影響軽減",
"アクション強化",
]
end
# ブランド別に「付きやすいギアパワー・付きづらいギアパワー・中立であるか」を返す
def brand
case @brand
when "アイロニック"
{
UsualGearPowerName: "スーパージャンプ時間短縮",
UnusualGearPowerName: "復活時間短縮",
isNeutral: false
}
when "アナアキ"
{
UsualGearPowerName: "サブ効率アップ",
UnusualGearPowerName: "スペシャル減少量ダウン",
isNeutral: false
}
when "アロメ"
{
UsualGearPowerName: "インク回復力アップ",
UnusualGearPowerName: "スーパージャンプ時間短縮",
isNeutral: false
}
when "エゾッコ"
{
UsualGearPowerName: "スペシャル減少量ダウン",
UnusualGearPowerName: "スペシャル増加量アップ",
isNeutral: false
}
when "エンペリー"
{
UsualGearPowerName: "サブ性能アップ",
UnusualGearPowerName: "相手インク影響軽減",
isNeutral: false
}
when "シグレニ"
{
UsualGearPowerName: "サブ影響軽減",
UnusualGearPowerName: "アクション強化",
isNeutral: false
}
when "シチリン"
{
UsualGearPowerName: "アクション強化",
UnusualGearPowerName: "スペシャル増加量アップ",
isNeutral: false
}
when "ジモン"
{
UsualGearPowerName: "メイン効率アップ",
UnusualGearPowerName: "ヒト移動速度アップ",
isNeutral: false
}
when "タタキケンサキ"
{
UsualGearPowerName: "メイン効率アップ",
UnusualGearPowerName: "サブ性能アップ",
isNeutral: false
}
when "バトロイカ"
{
UsualGearPowerName: "相手インク影響軽減",
UnusualGearPowerName: "メイン効率アップ",
isNeutral: false
}
when "バラズシ"
{
UsualGearPowerName: "アクション強化",
UnusualGearPowerName: "サブ性能アップ",
isNeutral: false
}
when "フォーリマ"
{
UsualGearPowerName: "スペシャル性能アップ",
UnusualGearPowerName: "サブ効率アップ",
isNeutral: false
}
when "ホタックス"
{
UsualGearPowerName: "復活時間短縮",
UnusualGearPowerName: "スペシャル減少量ダウン",
isNeutral: false
}
when "ホッコリー"
{
UsualGearPowerName: "サブ効率アップ",
UnusualGearPowerName: "インク回復力アップ",
isNeutral: false
}
when "ヤコ"
{
UsualGearPowerName: "スペシャル増加量アップ",
UnusualGearPowerName: "スペシャル性能アップ",
isNeutral: false
}
when "ロッケンベルグ"
{
UsualGearPowerName: "ヒト移動速度アップ",
UnusualGearPowerName: "イカダッシュ速度アップ",
isNeutral: false
}
when "クラーゲス"
{
UsualGearPowerName: "イカダッシュ速度アップ",
UnusualGearPowerName: "サブ影響軽減",
isNeutral: false
}
when "エゾッコリー"
{
UsualGearPowerName: "スペシャル減少量ダウン",
UnusualGearPowerName: "インク回復力アップ",
isNeutral: false
}
when "クマサン商会", "アタリメイド", "アミーボ"
{
UsualGearPowerName: "",
UnusualGearPowerName: "",
isNeutral: true
}
end
end
end
コメント
コメント一覧 (3件)
使い始める際にこちらの解説には大変お世話になりました。
ありがとうございます!
最近「二つ名」や「プレート」等が追加され翻訳して説明も読みましたがいまいち何の機能か私の頭では分かりません…
今後これらを解説する予定はありますでしょうか?
厚かましい質問で申し訳ありません。
役立って良かったです!
追加機能の翻訳(必要であれば解説も)やっておきますね!
作者曰く「週明けに、新機能についてのより詳細なチュートリアルを更新する」とのことですので、もう少しお待ちください。