Discord bot等级升级功能失效,xpUp函数经验值不增加问题求助
问题原因
1. 核心逻辑顺序颠倒
你的代码先判断未加本次经验的当前值是否满足升级条件,再决定是否加经验,完全不符合你预期的「先加经验再判断是否升级」的逻辑:
- 如果用户当前经验已经大于等于升级阈值,代码会直接走升级分支,完全不叠加本次的
amount经验,还会错误扣减经验 - 如果用户当前经验小于升级阈值,加完经验后也不会再次校验是否已经达到升级条件,不会触发升级
2. 升级时的经验扣除计算错误
升级分支中你先执行了等级+1操作,再计算扣除的经验值,此时的usersLvl[userId][1]已经是升级后的新等级,(usersLvl[userId][1]+1)*12实际是下下一级的升级阈值,会多扣12点经验。
3. 不支持连升多级
当前代码只做了1次升级判断,如果单次获得的经验足够升多级,只会触发1次升级,剩余溢出的经验不会正常计算。
修正后的代码
async def xpUp(userId, amount : int): userId = str(userId) # 初始化新用户数据 if userId not in usersLvl: usersLvl[userId] = [amount, 1] return # 先叠加本次获得的经验 usersLvl[userId][0] += amount # 循环判断是否满足升级条件,支持连续升级 while usersLvl[userId][0] >= (usersLvl[userId][1] + 1) * 12: # 先扣除当前等级升级需要的经验,再提升等级 usersLvl[userId][0] -= (usersLvl[userId][1] + 1) * 12 usersLvl[userId][1] += 1
内容的提问来源于stack exchange,提问作者SquiDev
相关产品推荐
相关产品推荐

