From adff3228d3a561fb4ffa78cfeb5a6f5d399e201b Mon Sep 17 00:00:00 2001 From: luying Date: Thu, 11 Mar 2021 15:45:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=EF=BC=9A=E6=B8=B8=E5=AE=A2?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=80=BB=E8=BE=91=E5=8F=98=E6=9B=B4=E4=B8=BA?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=94=AF=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shared/db/User.ts | 5 ++-- web-server/app/service/Auth.ts | 43 +++++++++++++++++++--------------- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/shared/db/User.ts b/shared/db/User.ts index fdb10c055..bc6ad6ca0 100644 --- a/shared/db/User.ts +++ b/shared/db/User.ts @@ -73,6 +73,7 @@ export default class User extends BaseModel { @prop({ required: true }) createTime: Date; + @prop({ required: true }) platform: string; @prop({ required: true, default: [] }) platforms: [{ @@ -113,8 +114,8 @@ export default class User extends BaseModel { return user; } - public static async getLastDeviceGuest(deviceId: string) { - const user: UserType = await UserModel.findOne({ device: { $elemMatch: { $eq: deviceId } }, isGuest: true }).sort({createTime: -1}).lean(); + public static async getLastDeviceGuest(deviceId: string, token: string) { + const user: UserType = await UserModel.findOneAndUpdate({ device: { $elemMatch: { $eq: deviceId } }, isGuest: true }, { token }).sort({createTime: -1}).lean(); return user; } diff --git a/web-server/app/service/Auth.ts b/web-server/app/service/Auth.ts index 7afb986e7..0ac9ac81c 100644 --- a/web-server/app/service/Auth.ts +++ b/web-server/app/service/Auth.ts @@ -1,4 +1,4 @@ -import { COUNTER, HERO_SYSTEM_TYPE, DEFAULT_LV, DEFAULT_ITEMS, ITID, DEFAULT_GOLD, DEFAULT_HERO_LV, DEFAULT_EQUIPS, DEFAULT_COIN, ADULT_AGE, GUEST_MAX_TIME, GUEST_DAY } from '@consts'; +import { COUNTER, HERO_SYSTEM_TYPE, DEFAULT_LV, DEFAULT_ITEMS, ITID, DEFAULT_GOLD, DEFAULT_HERO_LV, DEFAULT_EQUIPS, DEFAULT_COIN, ADULT_AGE, GUEST_MAX_TIME, GUEST_DAY, FIGURE_UNLOCK_CONDITION } from '@consts'; import { DEFAULT_HEROES } from '@consts'; import { HeroModel } from '@db/Hero'; import { RoleModel } from '@db/Role'; @@ -35,28 +35,27 @@ export default class Auth extends Service { if(isGuest) { const tel = ctx.service.utils.genCode(10); const token = ctx.service.utils.generateStr(256); - let lastGuest = null; - let guestTime = 0; - if(deviceId != DEFAULT_DEVICE_ID.PC) { - lastGuest = await UserModel.getLastDeviceGuest(deviceId); - if(lastGuest) { - guestTime = lastGuest.guestTime; + let lastGuest = await UserModel.getLastDeviceGuest(deviceId, token); + if(lastGuest) { + let guestTime = lastGuest.guestTime; + if(guestTime > GUEST_MAX_TIME) { + loginType = 3; + return this.ctx.service.utils.resResult(STATUS.SUCCESS, { + canLogin: true, + loginType + }); + } else { - let { createdAt } = lastGuest; - if(shouldRefresh(createdAt, new Date(), 0, GUEST_DAY)) { - guestTime = 0; - } + let param = this.getReturnParam(user); + return this.ctx.service.utils.resResult(STATUS.SUCCESS, { + canLogin: true, // 未设置密码等于未创建账号 + loginType, + ...param + }); } - } - if(guestTime > GUEST_MAX_TIME) { - loginType = 3; - return this.ctx.service.utils.resResult(STATUS.SUCCESS, { - canLogin: true, - loginType - }); } else { - user = await UserModel.createUser(isGuest, tel, token, platform, pkgName, serverType, deviceId, guestTime); + user = await UserModel.createUser(isGuest, tel, token, platform, pkgName, serverType, deviceId); let param = this.getReturnParam(user); return this.ctx.service.utils.resResult(STATUS.SUCCESS, { @@ -309,6 +308,7 @@ export default class Auth extends Service { const role = await RoleModel.createRole(uid, serverId, { roleId, code, roleName, seqId, lv: DEFAULT_LV, exp: (getExpByLv(DEFAULT_LV - 1) || { sum: 0 }).sum || 0 }); if (role) { let skinIds = new Array(); + let conditions = new Array<{type: number, num: number}>() for (let hid of DEFAULT_HEROES) { let hero = await HeroModel.findByHidAndRole(hid, roleId); if (hero) { @@ -326,9 +326,14 @@ export default class Auth extends Service { skins: [{ id: initialSkin, enable: true }], lv: DEFAULT_HERO_LV, exp: getHeroExpByLv(DEFAULT_HERO_LV - 1) || 0 }); skinIds.push(initialSkin); + conditions.push({type: FIGURE_UNLOCK_CONDITION.GET_HERO, num: hid}); + conditions.push({type: FIGURE_UNLOCK_CONDITION.GET_SKIN, num: initialSkin}); + await calPlayerCeAndSave(HERO_SYSTEM_TYPE.INIT, roleId, hero, {}); } + // 解锁形象 + await ctx.service.utils.unlockFigure(roleId, conditions, role); await reCalAllHeroCe(HERO_SYSTEM_TYPE.ADD_SKIN, roleId, {}, skinIds) for (let { id, count } of DEFAULT_ITEMS) {