背包乱斗代码解析
其一:打折与刷新
目录
流程图
打折机制概括
道具 | 每实例加成 | 条件/作用对象 | 回合限制 | 是否叠加 | 代码参照 |
Buy the Holy Light | 20% | Holy 或 Lamp(Oil/Djinn)物品 | 无 | 是(按实例相加) | BuytheHolyLight.gd |
Book of Basics | 10% | 物品为 Book 或 Spell | 无 | 是(按实例相加) | BookofBasics.gd |
Extra Bags | 40% | 物品为 Bag | 无 | 是(按实例相加) | ExtraBags.gd |
Vineweave Basket | 20% | 任意物品 | Round 1 与 10 | 是(按实例相加;仅当轮次命中) | VineweaveBasket.gd |
Lucky Cat | 3% | 任意物品 | 无 | 是(按实例相加) | LuckyCat.gd |
Mega Clover | 5% | 任意物品 | 无 | 是(按实例相加) | MegaClover.gd |
打折机制概括
打折机制代码对照
Shop.gd:常量、累计变量与首店固定打折槽位
# 文件:Core/Shop.gd 片段
const SALE_CHANCE = 0.1 # 全局基础打折概率(10%)
var saleAcc = 0.0 # 全局累加器,用于“失败后累计,超阈值强制折扣”
var bonusSaleChance: float # 本次判定的临时加成(由道具 onSaleRoll 注入)
func resetRerollCounter():
rerollsThisRun = 0
rollsThisRun = 0
saleAcc = 0.0 # 开跑或重置时,清零打折累计
uniqueAcc = 0.0
encounteredRoll.clear()
rerolledRoll.clear()
for item in ItemBook.getNumItems():
encounteredRoll.push_back(ItemBook.NOT_ENCOUNTERED)
rerolledRoll.push_back(ItemBook.NOT_ENCOUNTERED)
func openShop():
rolledUnique = null
itemsBoughtThisRound = 0
chooseOneShop = false
chooseOneLabel.hide()
shopSignLabel.show()
saleSlots.clear()
if isFirstShop(): # 首店:预选两个槽位固定打折
var indices = range(0, 5)
indices.shuffle()
saleSlots.push_back(indices[0])
saleSlots.push_back(indices[1])
Shop.gd:计算打折概率(含道具加成)
# 文件:Core/Shop.gd 片段
func getSaleChance(item = null):
var chance = SALE_CHANCE # 起始为基础概率 0.1
bonusSaleChance = 0 # 清空本次判定的临时加成
emit_signal("roll_sale", item) # 发出信号,允许道具对本次判定注入加成(如 Holy Light)
chance += bonusSaleChance # 累加由 onSaleRoll 添加的加成
if CustomRules.customRulesActive:
chance += CustomRules.getRuleValue(CustomRules.Rules.SalesChance) / 100.0 # 自定义规则的额外加成
return chance
打折机制代码对照
Shop.gd:进行打折判定与累计(核心逻辑)
# 文件:Core/Shop.gd 片段
func rollSale(slot) -> bool:
if not saleSlots.empty(): # 首店预选的打折槽位:命中直接返回 true
if slot.index in saleSlots:
saleSlots.erase(slot.index)
return true
var isSale = false
var saleChance = getSaleChance(slot.item) # 本次概率:基础 + 道具加成 + 自定义规则
if CustomRules.isRuleDefault(CustomRules.Rules.SalesChance):
saleChance *= slot.item.getSalesMultiplier() # 默认规则下再乘以物品的折扣乘数(大多数为 1.0)
if Util.flip(saleChance): # 随机判定(命中)
isSale = true
else:
saleAcc += saleChance # 未命中:把“本次实际概率”累加到全局 saleAcc(加成与乘数后的数值)
if saleAcc > 1.3: # 超过阈值:当前这一次强制标记折扣
isSale = true
if isSale:
saleAcc = 0.0 # 一旦出折扣(命中或强制),清零累计
return isSale
func addBonusSalesChance(chance):
bonusSaleChance += chance # 道具通过信号回调注入的加成,作用于“本次判定”
打折机制实例讲解
刷新机制概括
道具名 | 概率加成 | 容量加成 |
基础概率 | 30% (R1-3)�12% (R4+) | 1 |
Mega Clover | +20% | - |
Platin Customer Card | +30% | +1 |
Star of Courage | +5% | - |
Uniquely Unique | +50% | +2 |
Fedora | +65% | +3 |
刷新机制概括——勘误
刷新机制概括
回合 | (Common) | (Rare) | (Epic) | (Legendary) | (Godly) |
1 | 90% | 10% | 0% | 0% | 0% |
2 | 84% | 15% | 1% | 0% | 0% |
3 | 75% | 20% | 5% | 0% | 0% |
4 | 64% | 25% | 10% | 1% | 0% |
5 | 45% | 35% | 15% | 5% | 0% |
6 | 29% | 40% | 20% | 10% | 1% |
7 | 20% | 35% | 25% | 15% | 5% |
8 | 20% | 30% | 25% | 15% | 10% |
9 | 20% | 28% | 25% | 15% | 12% |
10 | 20% | 25% | 25% | 15% | 15% |
11 | 20% | 23% | 23% | 17% | 17% |
12+ | 20% | 20% | 20% | 20% | 20% |
刷新机制概括
门控道具 | shop_chance | 被门控道具数 | 门控机制类型 |
Puzzlebox | 75% | 5 | 硬编码稀有度映射 |
Chess Board | 70% | 12 | 稀有度映射 + 黑白平衡 |
Box of Riches | 50% | 25 | 权重系统(宝石池) |
Deck of Cards | 50% | 8 | 硬编码稀有度映射 |
Bowl of Treats | 30% | 3 | 随机选择池 |
Wolf Emblem | 25% | 3 | 随机选择池 |
Dragon Nest | 20% | 3 | 随机选择池 |
Mr Struggles | 20% | 2 | 随机选择池 |
Shaman Mask | 16% | 4 | 随机选择池 |
Frozen Flame | 15% | 11 | 随机选择池 / 加权袋 |
Slime Time | 10% | 1 | 固定道具 |
刷新机制概括
稀有度(rarity) | 产出道具 | 数组索引 |
0 (Common) | Puzzlebag L | puzzlebags[0] |
1 (Uncommon) | Puzzlebag S | puzzlebags[1] |
2 (Rare) | Puzzlebag Z | puzzlebags[2] |
3 (Epic) | Puzzlebag T | puzzlebags[3] |
4 (Godly) | Puzzlebag J | puzzlebags[4] |
刷新机制概括
稀有度 | gemOdds 权重 | 归一化概率 |
Common (0) | 16 | 59.26% |
Uncommon (1) | 8 | 29.63% |
Rare (2) | 2 | 7.41% |
Epic (3) | 1 | 3.70% |
Godly (4) | 0.5 | 1.85% |
总计 | 27 | 100% |
刷新机制概括
稀有度 | 产出卡牌 | 条件概率 | 备注 |
Common (0) | The Lovers | - | 固定 |
Uncommon (1) | The Tower | - | 固定 |
Rare (2) | The Reverse 或 The Ace | 50% / 50% | flip(0.5) 决定 |
Epic (3) | The Fool 或 The White-Eyes | 30% / 70% | flip(0.3) 选 Fool |
Godly (4) | The Joker 或 The Darkest Lotus | 50% / 50% | flip(0.5) 决定 |
刷新机制概括
稀有度信号 | 棋子段位 | 棋子实际稀有度 |
0 | Pawn(兵) | Common |
1 | Knight(骑士) | Rare |
2 | Bishop(主教) | Rare |
3 | Rook(车) | Epic |
4 | Queen(后) | Legendary |
5(50%概率由4升级) | King(王) | Godly |
刷新机制概括
道具名 | 权重 | 归一化概率 |
Book of Ice | 2 | 13.33% |
Spell Scroll Frostbolt | 2 | 13.33% |
Frostbite | 1 | 6.67% |
Ice Armor | 1 | 6.67% |
Ice Bow | 1 | 6.67% |
Ice Ring | 1 | 6.67% |
Ice Staff | 1 | 6.67% |
Ice Sword | 1 | 6.67% |
Icicle | 1 | 6.67% |
Mead | 1 | 6.67% |
Snowflake | 1 | 6.67% |
总计 | 15 | 100% |
刷新机制概括
道具名 | 概率 |
Emerald Egg | 33.33% |
Amethyst Egg | 33.33% |
Sapphire Egg | 33.33% |
刷新机制概括
道具名 | 概率 |
Badger Rune | 25% |
Elephant Rune | 25% |
Hawk Rune | 25% |
Tiger Rune | 25% |
刷新机制概括
固定产出 | 概率 |
Goobling | 100% |
刷新机制概括
道具名 | 概率 |
Courage Puppy | 33.33% |
Wisdom Puppy | 33.33% |
Power Puppy | 33.33% |
�
刷新机制概括
稀有度(重映射后) | 产出道具 |
Common (0) | Rat |
Rare (2) | Squirrel |
Epic (3) | Hedgehog |
刷新机制概括
道具名 | 概率 |
Mrs Struggles | 50% |
Miss Fortune | 50% |
刷新机制概括
刷新机制概括
刷新机制概括
刷新机制概括
刷新机制概括
T | 道具名 | T | 道具名 |
8 | Stone | 3 | Flute |
6 | Healing Herbs | 3 | Heart Container |
6 | Pocket Sand | 3 | Jynx torquilla |
5 | Blood Amulet | 3 | Leather Boots |
5 | Demonic Flask | 3 | Oil Lamp |
5 | Health Potion | 3 | Wolpertinger |
5 | Mana Orb | 2 | Acorn Collar |
4 | Bag of Stones | 2 | Death Scythe |
4 | Bow and Arrow | 2 | Fanfare |
4 | Dagger | 2 | Hungry Blade |
4 | Draconic Orb | 2 | Leather Armor |
4 | Heroic Potion | 2 | Leather Helm |
4 | Pestilence Flask | 2 | Lucky Cat |
4 | Stone Skin Potion | 2 | Rainbow Orb |
3 | Book of Basics | 2 | Shield of Valor |
3 | Book of Darkness | 2 | Thorn Whip |
3 | Book of Ice | 2 | Toad |
3 | Book of Light | 1 | Fancy Fencing Rapier |
3 | Book of Nature | 1 | Greatsword |
3 | Broom | 1 | Hammer |
3 | Corrupted Crystal | 1 | Lightsaber |
3 | Crown | 1 | Rib Saw Blade |
3 | Cupcake | | |
刷新机制概括
刷新机制概括
刷新机制概括
刷新机制概括
道具 | 触发条件(descr 满足时乘权重) | 权重 | 初始加成次数(命中后递减到 0 停止) | 触发次数/递减 | 代码位置 |
Blood Manipulation | Vampiric 类型;Blood Amulet 特判 | 1.5(Blood Amulet) / 1.3(其他 Vampiric) | ∞ | 无限次(无递减) | Backpack Battles/Items/Exclusive/BloodManipulation.gd |
Buy the Holy Light | Holy 类型 或 Oil Lamp / Djinn Lamp | 1.3 | ∞ | 无限次 | Backpack Battles/Items/Exclusive/BuytheHolyLight.gd |
Dark Ritual | Corrupted Crystal 且 boosted>0 | 1.5 | 1 | boosted 初始 1,命中后 -1 | Backpack Battles/Items/Exclusive/DarkRitual.gd |
Dragon Set | Leather Armor / Boots / Gloves of Haste,各自缺且对应龙件未拥有 | 1.3 | ∞ | 条件型,无递减 | Backpack Battles/Items/Exclusive/DragonSet.gd |
Extra Bags | 任意袋子 | bagWeight(JSON bagweight) | ∞ | 无限次 | Backpack Battles/Items/Exclusive/ExtraBags.gd |
Heavy Drinking | Potion 类型 且 boostedPotions>0 | 1.5 | 3 | boostedPotions 初始 3,命中后 -1 | Backpack Battles/Items/Exclusive/HeavyDrinking.gd |
Knife to Meet You | Dagger 且 boosted>0 | 1.7 | 3 | boosted 初始 3,命中后 -1 | Backpack Battles/Items/Exclusive/KnifetoMeetYou.gd |
Hardwood | Common 近战武器,且当前没有 Common 近战武器 | 1.5 | ∞ | 条件型,无递减 | Backpack Battles/Items/Exclusive/Hardwood.gd |
Mana Mastery | Mana Orb 且 boosted>0 | 1.8 | 1 | boosted 初始 1,命中后 -1 | Backpack Battles/Items/Exclusive/ManaMastery.gd |
刷新机制概括
道具 | 触发条件(descr 满足时乘权重) | 权重 | 初始加成次数(命中后递减到 0 停止) | 触发次数/递减 | 代码位置 |
Girl Power | 任意 Class Item | 1.2 | ∞ | 无限次 | Backpack Battles/Items/Exclusive/GirlPower.gd |
Mushroom Farm | Fly Agaric,且蘑菇总数未达 mushroomsNeeded | 1.7 | ∞ | 条件型,无递减 | Backpack Battles/Items/Exclusive/MushroomFarm.gd |
Piggy Pinata | Piggybank | 1.5 | ∞ | 无限次 | Backpack Battles/Items/Exclusive/PiggyPinata.gd |
Power of the Moon | Mana Orb 且 boosted>0 | 1.5 | 1 | boosted 初始 1,命中后 -1 | Backpack Battles/Items/Exclusive/PoweroftheMoon.gd |
Smelly Barrier | Garlic 且 boostedGarlic>0 | 1.5 | 3 | boostedGarlic 初始 3,命中后 -1 | Backpack Battles/Items/Exclusive/SmellyBarrier.gd |
Solaris | Shield of Valor / Holy Armor 且 boosted>0 | 1.5 | 1 | boosted 初始 1,命中后 -1 | Backpack Battles/Items/Exclusive/Solaris.gd |
Spicy Banana | Banana 且 boostedBananas>0 | 1.5 | 3 | boostedBananas 初始 3,命中后 -1 | Backpack Battles/Items/Exclusive/SpicyBanana.gd |
Stoned | Stone 且 boostedStones>0 | 1.7 | 4 | boostedStones 初始 4,命中后 -1 | Backpack Battles/Items/Exclusive/Stoned.gd |
刷新机制概括
道具 | 触发条件(descr 满足时乘权重) | 权重 | 初始加成次数(命中后递减到 0 停止) | 触发次数/递减 | 代码位置 |
Uniquely Unique | Customer Card 且 boosted>0 | 1.5 | 2 | boosted 初始 2,命中后 -1 | Backpack Battles/Items/Exclusive/UniquelyUnique.gd |
Smithing for Dummies | Whetstone 且 boostedWhetstones>0 | 1.5 | 1 | boostedWhetstones 初始 1,命中后 -1 | Backpack Battles/Items/Exclusive/SmithingForDummies.gd |
Shielded | Shield of Valor 且 boostedShields>0 | 1.5 | 1 | boostedShields 初始 1,命中后 -1 | Backpack Battles/Items/Exclusive/Shielded.gd |
Acorn Ace | Acorn Collar 且 boostedCollars>0 | 1.5 | 1 | boostedCollars 初始 1,命中后 -1 | Backpack Battles/Items/Exclusive/AcornAce.gd |
未来研究�打折与刷新结合的实例研究
ご清聴ありがとうございました