From d973dc95cc9463fad8924d23451fb1e23413d070 Mon Sep 17 00:00:00 2001 From: "COMPUTER\\EDY" <249929363@qq.com> Date: Thu, 30 Jul 2026 12:22:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=91=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/laf-cloud/functions/address.ts | 9 +++ server/laf-cloud/functions/login.ts | 35 +++++++++++- server/laf-cloud/functions/userData.ts | 74 ++++++++++++++++++------- server/laf-cloud/functions/userLevel.ts | 27 +++++++-- 4 files changed, 117 insertions(+), 28 deletions(-) diff --git a/server/laf-cloud/functions/address.ts b/server/laf-cloud/functions/address.ts index e2817c9..7597f43 100644 --- a/server/laf-cloud/functions/address.ts +++ b/server/laf-cloud/functions/address.ts @@ -35,6 +35,8 @@ export default async function (ctx: FunctionContext) { async function rank(db1, uid, res1, oldaddress, address) { let add = res1.data.addLevel; + const userCat = res1.data?.userCat; + const userCatData = userCat != null ? { userCat: userCat } : {}; if (add < 5) { return; } @@ -57,6 +59,11 @@ async function rank(db1, uid, res1, oldaddress, address) { for (let i = 0; i < total[address].length; i++) { if (total[address][i].id == uid) { isHave = true; + if (userCat != null) { + total[address][i].userCat = userCat; + } else { + delete total[address][i].userCat; + } break; } } @@ -68,6 +75,7 @@ async function rank(db1, uid, res1, oldaddress, address) { addLevel: add, time: Date.now(), username: res1.data?.username, + ...userCatData, useravatar: res1.data?.useravatar, useravatarIcon: res1.data?.useravatarIcon, levelAmount: res1.data?.levelAmount @@ -80,6 +88,7 @@ async function rank(db1, uid, res1, oldaddress, address) { addLevel: add, time: Date.now(), username: res1.data?.username, + ...userCatData, useravatar: res1.data?.useravatar, useravatarIcon: res1.data?.useravatarIcon, levelAmount: res1.data?.levelAmount diff --git a/server/laf-cloud/functions/login.ts b/server/laf-cloud/functions/login.ts index bdc7bf6..49db9fe 100644 --- a/server/laf-cloud/functions/login.ts +++ b/server/laf-cloud/functions/login.ts @@ -8,7 +8,7 @@ const ThinkingData = require('thinkingdata-node'); import Ip2region from 'ip2region'; const query = new Ip2region(); const canIos = false; -const version = "1.9.93"; +const version = "2.0.02"; const AB_CONFIG_COLLECTION = "ab_config"; export default async function (ctx: FunctionContext) { let code = ctx.body.code; @@ -41,6 +41,7 @@ export default async function (ctx: FunctionContext) { openid: openid, unionid: unionid, session_key: session_key, + userCat: generateUserCat(), register_time: Date.now(), onlyId: ref.data.count, distinctId: distinctId, @@ -105,7 +106,11 @@ export default async function (ctx: FunctionContext) { task[key].state = 0; } } - await db.collection(dbname).where({ _id: userData._id }).update({ session_key: session_key, distinctId: distinctId, isDebug: isDebug, isFirst: false, unionid: unionid, task: JSON.stringify(task), taskTime: Date.now() + 8 * 3600000, token: token }); + const loginUpdate: any = { session_key: session_key, distinctId: distinctId, isDebug: isDebug, isFirst: false, unionid: unionid, task: JSON.stringify(task), taskTime: Date.now() + 8 * 3600000, token: token }; + if (userData.userCat == null) { + loginUpdate.userCat = generateUserCat(); + } + await db.collection(dbname).where({ _id: userData._id }).update(loginUpdate); } if (userData?.freeze) { return { code: 0, data: "账号封禁", msg: "账号封禁" }; @@ -156,6 +161,32 @@ export default async function (ctx: FunctionContext) { //console.log("查询时间:"); return { code: 1, data: userData } } + +function generateUserCat(): string { + const weightedCats = [ + { value: "1", weight: 150 }, + { value: "2", weight: 150 }, + { value: "3", weight: 150 }, + { value: "4", weight: 150 }, + { value: "5", weight: 150 }, + { value: "6", weight: 150 }, + { value: "7", weight: 150 }, + { value: "8", weight: 150 }, + { value: "9", weight: 30 }, + { value: "10", weight: 30 }, + { value: "11", weight: 8 }, + ]; + const totalWeight = weightedCats.reduce((total, cat) => total + cat.weight, 0); + let randomWeight = Math.random() * totalWeight; + for (let i = 0; i < weightedCats.length; i++) { + randomWeight -= weightedCats[i].weight; + if (randomWeight < 0) { + return weightedCats[i].value; + } + } + return weightedCats[weightedCats.length - 1].value; +} + function stringToHash(input: string, algorithm: 'sha1' | 'sha256' | 'sha512' = 'sha256'): string { return createHash(algorithm).update(input).digest('hex'); } diff --git a/server/laf-cloud/functions/userData.ts b/server/laf-cloud/functions/userData.ts index 8535488..010710f 100644 --- a/server/laf-cloud/functions/userData.ts +++ b/server/laf-cloud/functions/userData.ts @@ -2,18 +2,18 @@ import cloud from '@lafjs/cloud'; const db = cloud.database(); import Utils from "@/Utils"; export default async function (ctx: FunctionContext) { - const action=ctx.body.action; - const uid=ctx.body.uid; + const action = ctx.body.action; + const uid = ctx.body.uid; let dbname = "users"; const gameName = ctx.body.gameName; if (gameName == "iaa") { dbname = "usersAd"; } - if(!action){ + if (!action) { return { code: 0, data: null, msg: "未获取到action" }; } - if(!uid){ - return {code:0,data:null,msg:"未获取到uid"}; + if (!uid) { + return { code: 0, data: null, msg: "未获取到uid" }; } let res = await db.collection(dbname).where({ _id: uid }).getOne(); const token1 = ctx.body.token; @@ -23,14 +23,19 @@ export default async function (ctx: FunctionContext) { return { code: 0, data: null, msg: "token校验失败" }; } } + if (res.data && (res.data.userCat == null || res.data.userCat == undefined || res.data.userCat == "")) { + const userCat = generateUserCat(); + await db.collection(dbname).where({ _id: uid }).update({ userCat: userCat }); + res.data.userCat = userCat; + } switch (action) { case 'save': const userData1 = JSON.parse(ctx.body.userData); - if(!userData1){ + if (!userData1) { return { code: 0, data: null, msg: "未获取到userData" }; } //console.error(userData1) - let data={ + let data = { // coinAmount:Number(userData1.coinAmount)||0, // freezeAmount:Number(userData1.freezeAmount)||0, // hammerAmount:Number(userData1.hammerAmount)||0, @@ -39,21 +44,22 @@ export default async function (ctx: FunctionContext) { // timestamp:Date.now(), // register_time: Number(userData1.register_time)||Date.now(), // userPowerTime: Number(userData1.userPowerTime) || 0, - useravatar:userData1.useravatar||Math.floor(Math.random()*4)+"", - username:userData1.username||"user", - useravatarIcon: userData1.useravatarIcon||"0", + useravatar: userData1.useravatar || Math.floor(Math.random() * 4) + "", + username: userData1.username || "user", + useravatarIcon: userData1.useravatarIcon || "0", + userCat: userData1.userCat || res.data?.userCat, } //console.log(data); let res2 = await db.collection(dbname).where({ _id: uid }).update(data); - if(res2.ok&&res2.updated==1){ - return { code:1, data: null, msg: "用户数据更新成功" } - }else{ + if (res2.ok && res2.updated == 1) { + return { code: 1, data: null, msg: "用户数据更新成功" } + } else { return { code: 0, data: null, msg: "用户数据更新失败" } } case 'read': - let ret = await db.collection(dbname).where({ _id: uid }).getOne(); - let userData=ret.data; - if(ret.data){ + let ret = await db.collection(dbname).where({ _id: uid }).getOne(); + let userData = ret.data; + if (ret.data) { let share = userData.shareLv; if (share) { share = JSON.parse(share); @@ -75,6 +81,7 @@ export default async function (ctx: FunctionContext) { timestamp: Number(userData.timestamp) || 0, useravatar: userData.useravatar || "", username: userData.username || "user", + userCat: userData.userCat, register_time: Number(userData.register_time) || 0, monthCardTime: Number(userData.monthCardTime) || 0, monthCardReward: Number(userData.monthCardReward) || 0, @@ -82,19 +89,44 @@ export default async function (ctx: FunctionContext) { rebornGiftTime: rebornGiftTime, rebornGiftCount: rebornGiftCount } - return {code:1,data:data,msg:"获取玩家数据成功"} - }else{ - return {code:0,data:null,msg:"获取玩家数据失败"} + return { code: 1, data: data, msg: "获取玩家数据成功" } + } else { + return { code: 0, data: null, msg: "获取玩家数据失败" } } - //return 1; + //return 1; default: return { - code:400, + code: 400, message: '无效的操作类型,请使用 save 或 read' } } } +function generateUserCat(): string { + const weightedCats = [ + { value: "1", weight: 150 }, + { value: "2", weight: 150 }, + { value: "3", weight: 150 }, + { value: "4", weight: 150 }, + { value: "5", weight: 150 }, + { value: "6", weight: 150 }, + { value: "7", weight: 150 }, + { value: "8", weight: 150 }, + { value: "9", weight: 30 }, + { value: "10", weight: 30 }, + { value: "11", weight: 8 }, + ]; + const totalWeight = weightedCats.reduce((total, cat) => total + cat.weight, 0); + let randomWeight = Math.random() * totalWeight; + for (let i = 0; i < weightedCats.length; i++) { + randomWeight -= weightedCats[i].weight; + if (randomWeight < 0) { + return weightedCats[i].value; + } + } + return weightedCats[weightedCats.length - 1].value; +} + function getTodayStartTimestamp() { const date = new Date(); date.setHours(0, 0, 0, 0); diff --git a/server/laf-cloud/functions/userLevel.ts b/server/laf-cloud/functions/userLevel.ts index 9a32428..215236d 100644 --- a/server/laf-cloud/functions/userLevel.ts +++ b/server/laf-cloud/functions/userLevel.ts @@ -67,7 +67,7 @@ export default async function (ctx: FunctionContext) { rankNum = await rank(db1, uid, add, levelAmount, res1, address, levelTJ); //console.log(res1.data.unionid) if (res1.data.unionid) { - sendRank(uid, res1.data?.useravatar, res1.data?.username, res1.data?.useravatarIcon, add, levelTJ, address, res1.data.unionid); + sendRank(uid, res1.data?.useravatar, res1.data?.username, res1.data?.userCat, res1.data?.useravatarIcon, add, levelTJ, address, res1.data.unionid); } levelTJ = 1; careerAmount += 1; @@ -100,7 +100,7 @@ function isSameDayUTC(timestamp1, timestamp2) { } -async function sendRank(uid, useravatar, username, useravatarIcon, count, levelTJ, address, unionid) { +async function sendRank(uid, useravatar, username, userCat, useravatarIcon, count, levelTJ, address, unionid) { let res = await fetch("https://bx7gi3d4oq.sealoshzh.site/userLevel", { method: 'POST', headers: { @@ -111,6 +111,7 @@ async function sendRank(uid, useravatar, username, useravatarIcon, count, levelT unionid: unionid, useravatar: useravatar, username: username, + ...(userCat != null ? { userCat: userCat } : {}), useravatarIcon: useravatarIcon, count: count, levelTJ: levelTJ, @@ -122,6 +123,8 @@ async function sendRank(uid, useravatar, username, useravatarIcon, count, levelT } async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) { let rankInfo = await db.collection("sRank").where({ _id: db1 }).getOne(); + const userCat = res1.data?.userCat; + const userCatData = userCat != null ? { userCat: userCat } : {}; let total = rankInfo.data.total; if (total != null) { @@ -138,18 +141,24 @@ async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) { total["all"][i].username = res1.data?.username, total["all"][i].useravatarIcon = res1.data?.useravatarIcon, total["all"][i].addLevel = add; + if (userCat != null) { + total["all"][i].userCat = userCat; + } else { + delete total["all"][i].userCat; + } total["all"][i].time = Date.now(); break; } } if (isHave == false) { let length = total["all"].length; - if (length < 10 || add > total["all"][length - 1].addLevel) { + if (length < 11 || add > total["all"][length - 1].addLevel) { total["all"].push({ id: uid, addLevel: add, time: Date.now(), username: res1.data?.username, + ...userCatData, useravatar: res1.data?.useravatar, useravatarIcon: res1.data?.useravatarIcon, levelAmount: levelAmount @@ -162,6 +171,7 @@ async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) { addLevel: add, time: Date.now(), username: res1.data?.username, + ...userCatData, useravatar: res1.data?.useravatar, useravatarIcon: res1.data?.useravatarIcon, levelAmount: levelAmount @@ -173,8 +183,8 @@ async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) { } return a.time - b.time; }); - if (total["all"].length >= 10) { - total["all"] = total["all"].slice(0, 10); + if (total["all"].length >= 11) { + total["all"] = total["all"].slice(0, 11); } if (total[address]) { let isHave = false; @@ -185,6 +195,11 @@ async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) { total[address][i].username = res1.data?.username, total[address][i].useravatarIcon = res1.data?.useravatarIcon, total[address][i].addLevel = add; + if (userCat != null) { + total[address][i].userCat = userCat; + } else { + delete total[address][i].userCat; + } total[address][i].time = Date.now(); break; } @@ -197,6 +212,7 @@ async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) { addLevel: add, time: Date.now(), username: res1.data?.username, + ...userCatData, useravatar: res1.data?.useravatar, useravatarIcon: res1.data?.useravatarIcon, levelAmount: levelAmount @@ -209,6 +225,7 @@ async function rank(db1, uid, add, levelAmount, res1, address, levelTJ) { addLevel: add, time: Date.now(), username: res1.data?.username, + ...userCatData, useravatar: res1.data?.useravatar, useravatarIcon: res1.data?.useravatarIcon, levelAmount: levelAmount