修改助力积分获取算法

This commit is contained in:
CounterFire2023 2024-04-11 17:56:48 +08:00
parent 5431a840b4
commit cba5613353
7 changed files with 63 additions and 30 deletions

View File

@ -5,36 +5,36 @@
"name": "Iron Chest", "name": "Iron Chest",
"initScoreMin": 75, "initScoreMin": 75,
"initScoreMax": 125, "initScoreMax": 125,
"bounsCfg": [15, 15],
"maxBounsCount": 5, "maxBounsCount": 5,
"probability": 4564 "probability": 4564,
"maxBounsScore": 75
}, },
{ {
"level": 2, "level": 2,
"name": "Bronze Chest", "name": "Bronze Chest",
"initScoreMin": 175, "initScoreMin": 175,
"initScoreMax": 225, "initScoreMax": 225,
"bounsCfg": [13, 13],
"maxBounsCount": 8, "maxBounsCount": 8,
"probability": 3526 "probability": 3526,
"maxBounsScore": 105
}, },
{ {
"level": 3, "level": 3,
"name": "Sliver Chest", "name": "Sliver Chest",
"initScoreMin": 375, "initScoreMin": 375,
"initScoreMax": 425, "initScoreMax": 425,
"bounsCfg": [12,12],
"maxBounsCount": 12, "maxBounsCount": 12,
"probability": 1724 "probability": 1725,
"maxBounsScore": 145
}, },
{ {
"level": 4, "level": 4,
"name": "Golden Chest", "name": "Golden Chest",
"initScoreMin": 775, "initScoreMin": 775,
"initScoreMax": 825, "initScoreMax": 825,
"bounsCfg": [11, 11],
"maxBounsCount": 15, "maxBounsCount": 15,
"probability": 186 "probability": 184,
"maxBounsScore": 175
} }
] ]

View File

@ -2,19 +2,19 @@
"total_sign": [ "total_sign": [
{ {
"days": 5, "days": 5,
"reward": 2 "reward": 1
}, },
{ {
"days": 10, "days": 10,
"reward": 3 "reward": 2
}, },
{ {
"days": 20, "days": 20,
"reward": 5 "reward": 3
}, },
{ {
"days": 30, "days": 30,
"reward": 10 "reward": 4
} }
], ],
"sequential_sign": [ "sequential_sign": [
@ -28,11 +28,11 @@
}, },
{ {
"days": 15, "days": 15,
"reward": 4 "reward": 3
}, },
{ {
"days": 30, "days": 30,
"reward": 8 "reward": 4
} }
] ]
} }

View File

@ -1,26 +1,42 @@
[ [
{ {
"score": 600, "rankMin": 1,
"level": "Challenger" "rankMax": 1,
"level": "1"
}, },
{ {
"score": 500, "rankMin": 2,
"level": "Diamond" "rankMax": 2,
"level": "2"
}, },
{ {
"score": 400, "rankMin": 3,
"level": "Platnum" "rankMax": 3,
"level": "3"
}, },
{ {
"score": 100, "rankMin": 4,
"level": "Bronze" "rankMax": 10,
"level": "4"
}, },
{ {
"score": 300, "rankMin": 11,
"level": "Gold" "rankMax": 100,
"level": "5"
}, },
{ {
"score": 0, "rankMin": 101,
"level": "Silver" "rankMax": 1000,
"level": "6"
},
{
"rankMin": 1001,
"rankMax": 10000,
"level": "7"
},
{
"rankMin": 10001,
"rankMax": 99999999,
"level": "8"
} }
] ]

View File

@ -18,7 +18,7 @@ export const CONFIRM_MAIL_HTML = `
export const MANUAL_OPEN_GAME = false export const MANUAL_OPEN_GAME = false
// 每一步能获得的最小分数 // 每一步能获得的最小分数
export const STEP_SCORE_MIN = 50 export const STEP_SCORE_MIN = 40
// 每一步能获得的最大分数 // 每一步能获得的最大分数
export const STEP_SCORE_MAX = 50 export const STEP_SCORE_MAX = 50
// 每一步能获得的宝箱的概率 // 每一步能获得的宝箱的概率

View File

@ -213,7 +213,7 @@ class BoxController extends BaseController {
if (userCurrent >= userMax) { if (userCurrent >= userMax) {
throw new ZError(16, 'user enhance times exceed') throw new ZError(16, 'user enhance times exceed')
} }
const score = Math.floor(Math.random() * (chest.bounsCfg[1] - chest.bounsCfg[0] + 1) + chest.bounsCfg[0]) const score = chest.bounsCfg[chest.bonusUsers.length] || chest.bounsCfg[chest.bounsCfg.length - 1]
await ActivityChest.updateOne( await ActivityChest.updateOne(
{ _id: chest.id }, { _id: chest.id },
{ {

View File

@ -51,7 +51,7 @@ export class ActivityChestClass extends BaseModule {
// 最大助力次数 // 最大助力次数
@prop() @prop()
public maxBounsCount: number public maxBounsCount: number
// 助力积分配置[min, max] // 助力积分配置[v1, v2, v3]
@prop({ type: () => [Number], default: [] }) @prop({ type: () => [Number], default: [] })
public bounsCfg: number[] public bounsCfg: number[]
// 基础积分 // 基础积分

View File

@ -13,6 +13,23 @@ chestCfg.chests.forEach((cfg: any) => {
chestLevelMap.set(cfg.level, cfg) chestLevelMap.set(cfg.level, cfg)
}) })
const generateBounsCfg = (cfg: any) => {
let randoms = []
for (let i = 0; i < cfg.bounsCount; i++) {
randoms.push(Math.random())
}
let total = randoms.reduce((a: number, b: number) => a + b)
randoms = randoms.map((r: number) => r / total)
let ys = []
randoms.forEach((r: number) => {
let tmp = cfg.maxBounsScore * r
tmp = Math.min(1, Math.round(tmp))
ys.push(tmp)
})
ys.sort((a: number, b: number) => b - a)
return ys
}
export const generateNewChest = (uid: string, activity: string, level = 1, status = ChestStatusEnum.LOCKED) => { export const generateNewChest = (uid: string, activity: string, level = 1, status = ChestStatusEnum.LOCKED) => {
let cfg = chestLevelMap.get(level) let cfg = chestLevelMap.get(level)
if (!cfg) { if (!cfg) {
@ -24,7 +41,7 @@ export const generateNewChest = (uid: string, activity: string, level = 1, statu
activity: activity, activity: activity,
level: level, level: level,
maxBounsCount: cfg.maxBounsCount, maxBounsCount: cfg.maxBounsCount,
bounsCfg: cfg.bounsCfg, bounsCfg: generateBounsCfg(cfg),
scoreInit, scoreInit,
status, status,
}) })