diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index 9359f7bad..1f0041528 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -2,7 +2,7 @@ import { Application, BackendSession } from "pinus"; import { resResult, getRandEelm, getResStr, shouldRefresh } from "../../../pubUtils/util"; import { STATUS, ROLE_SELECT, FRIEND_DROP_TYPE, FRIEND_RELATION_TYPE, POPULATE_TYPE, BLOCK_OPEATE, CONSUME_TYPE, ITID, HERO_SELECT, EQUIP_SELECT } from "../../../consts"; import { RoleModel, RoleType } from "../../../db/Role"; -import { getBeforeDaySeconds } from "../../../pubUtils/timeUtil"; +import { getBeforeHourSeconds } from "../../../pubUtils/timeUtil"; import { FriendApplyModel } from "../../../db/FriendApply"; import { FriendApplyParams, FriendListParam, FriendRecommendParams, BlackListParam, FriendValueListParam } from "../../../domain/roleField/friend"; import { FriendShipModel, FriendShipType } from "../../../db/FriendShip"; @@ -18,6 +18,7 @@ import { FriendPresentLogModel } from '../../../db/FriendPresentLog'; import { HeroModel } from "../../../db/Hero"; import { EquipModel } from "../../../db/Equip"; import { getPlayerMainAttribute } from "../../../services/pvpService"; +import { FRIEND } from "../../../pubUtils/dicParam"; export default function (app: Application) { @@ -33,14 +34,15 @@ export class FriendHandler { public async getRecommend(msg: { }, session: BackendSession) { let roleId: string = session.get('roleId'); - const day = getBeforeDaySeconds(1); + const day = getBeforeHourSeconds(FRIEND.FRIEND_RECONMMEND_ACTIVETIME); - const { lv } = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_LV); - let allList = await RoleModel.getRecommedList(lv - 5, lv + 5, day); + const { lv, serverId: myServerId, userInfo: { serverType: myServerType } } = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_MY_SERVER); + let allList = await RoleModel.getRecommedList(lv - FRIEND.FRIEND_RECONMMEND_LEVEL, lv + FRIEND.FRIEND_RECONMMEND_LEVEL, day); let myFriendRelation = await FriendRelationModel.findFriendByRole(roleId, POPULATE_TYPE.NOT); - let paramAllList = new Array(); + let myServerList = new Array(); + let otherServerList = new Array(); for(let role of allList) { let type = getRecommendType(myFriendRelation, roleId, role.roleId); if(type == FRIEND_RELATION_TYPE.NORMAL) { @@ -51,13 +53,28 @@ export class FriendHandler { let serverName = await getServerName(serverType, serverId); param.setServerName(serverId, serverName); - paramAllList.push(param); + if(myServerId == serverId && myServerType == serverType ) { + myServerList.push(param); + } else { + otherServerList.push(param); + } + } } - // TODO 修改,本服在前,其他服在后 - let list = getRandEelm(paramAllList, 6); - if(!list.length) list = paramAllList; + // 前4个是本服的,后4个随意,优先本服,其他补上 + let myServerLen = myServerList.length > FRIEND.FRIEND_RECONMMEND_SERVICE? FRIEND.FRIEND_RECONMMEND_SERVICE: myServerList.length; + let list1:FriendRecommendParams[] = getRandEelm(myServerList, myServerLen); + + let otherServerLen = otherServerList.length > FRIEND.FRIEND_RECONMMEND_NUM - myServerLen? FRIEND.FRIEND_RECONMMEND_NUM - myServerLen: otherServerList.length; + let list2:FriendRecommendParams[] = getRandEelm(otherServerList, otherServerLen); + + if(list2.length < FRIEND.FRIEND_RECONMMEND_NUM - myServerLen) { + list1 = getRandEelm(myServerList, FRIEND.FRIEND_RECONMMEND_NUM - list2.length); + } + console.log + + let list = list1.concat(list2); return resResult(STATUS.SUCCESS, { list }); } @@ -302,7 +319,7 @@ export class FriendHandler { return resResult(STATUS.FRIEND_BLACK_HAS_ADD); } - role = await RoleModel.increaseBlockCnt(roleId, 1, curFriend? -1: 0, 100); // 增加黑名单人数 + role = await RoleModel.increaseBlockCnt(roleId, 1, curFriend? -1: 0, FRIEND.FRIEND_BLACKLIST_MAX); // 增加黑名单人数 if(!role) { return resResult(STATUS.FRIEND_BLACK_MAX) } @@ -373,7 +390,7 @@ export class FriendHandler { if(type == BLOCK_OPEATE.REMOVE_AND_APPLY) { // 申请好友 - let applyResult = await RoleModel.increaseFriendApplyCnt(hisRoleId, 1, 50); + let applyResult = await RoleModel.increaseFriendApplyCnt(hisRoleId, 1, FRIEND.FRIEND_MANAGE_APPLICATION); if(!applyResult) { str = getResStr(STATUS.FRIEND_HIS_APPLY_MAX); } else { @@ -430,17 +447,17 @@ export class FriendHandler { let list = new Array(); for(let relation of canSendList) { - if(todaySendCnt + 1 > max) break; + if(todaySendCnt + FRIEND.FRIEND_FRIENDPOINT_ADD > max) break; let fs = relation.friendShip; let ref = shouldRefresh(fs.refTime, new Date(), 0); - let sendHeartRec = await FriendShipModel.sendHeart(roleId, relation.roleId, 1, 1, ref); + let sendHeartRec = await FriendShipModel.sendHeart(roleId, relation.roleId, 1, FRIEND.FRIEND_RECEIVE_SINGLE, ref); if(!sendHeartRec) continue; let param = new FriendValueListParam(relation.roleId, roleId, sendHeartRec); list.push(param); - todaySendCnt += 1; - todaySendInc += 1; + todaySendCnt += FRIEND.FRIEND_FRIENDPOINT_ADD; + todaySendInc += FRIEND.FRIEND_FRIENDPOINT_ADD; } if(todaySendInc <= 0) return resResult(STATUS.FRIEND_HAS_SENT); @@ -487,7 +504,7 @@ export class FriendHandler { let list = new Array(); for(let relation of canReceiveList) { if(relation.beSentHeart > 0) { - if(todayReceiveCnt + 1 > max) break; + if(todayReceiveCnt + FRIEND.FRIEND_FRIENDPOINT_ADD > max) break; // 收取爱心 let fs = relation.friendShip; @@ -498,8 +515,8 @@ export class FriendHandler { let param = new FriendValueListParam(relation.roleId, roleId, receiveHeartRec); list.push(param); - todayReceiveCnt += 1; - todayReceiveInc += 1; + todayReceiveCnt += FRIEND.FRIEND_FRIENDPOINT_ADD; + todayReceiveInc += FRIEND.FRIEND_FRIENDPOINT_ADD; } } if(todayReceiveInc <= 0) return resResult(STATUS.FRIEND_HAS_RECEIVE); diff --git a/shared/consts/constModules/selectConst.ts b/shared/consts/constModules/selectConst.ts index 099de3796..b5ac4ac8d 100644 --- a/shared/consts/constModules/selectConst.ts +++ b/shared/consts/constModules/selectConst.ts @@ -8,7 +8,8 @@ export enum ROLE_SELECT { HANDLE_APPLY = 'roleId friendCnt lv', ATTR = 'globalCeAttr', GET_LV = 'lv', - GET_ROLE_ID = 'roleId' + GET_ROLE_ID = 'roleId', + GET_MY_SERVER = 'lv serverId userInfo.serverType', }; export enum HERO_SELECT { @@ -20,7 +21,7 @@ export enum EQUIP_SELECT { HERO_DETAIL = 'id name ePlaceId quality' } -export enum FRIEND { +export enum FRIEND_SELECT { SEND_PRESENT = 'friendValue friendLv' } diff --git a/shared/db/FriendShip.ts b/shared/db/FriendShip.ts index b97250a80..1fd7cf980 100644 --- a/shared/db/FriendShip.ts +++ b/shared/db/FriendShip.ts @@ -3,7 +3,8 @@ import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoos import { getFriendLvByExp } from '../pubUtils/data'; import * as util from '../pubUtils/friendUtil'; import { nowSeconds } from '../pubUtils/timeUtil'; -import { FRIEND } from '../consts'; +import { FRIEND } from '../pubUtils/dicParam'; +import { FRIEND_SELECT } from '../consts'; /** * 好友直接的亲密值 @@ -107,12 +108,12 @@ export default class FriendShip extends BaseModel { if(shouldRefresh) { let obj = this.getRefData(); result = await FriendShipModel.findOneAndUpdate({ roleIds }, { - $inc: { friendValue: 5}, + $inc: { friendValue: FRIEND.FRIEND_CLOSEPOINT_ADD}, $set: { ...obj, ...params.inc, ...params.set } }, { new: true }).lean({ virtuals: true }); } else { result = await FriendShipModel.findOneAndUpdate({ roleIds, ...params.lt }, { - $inc: { ...params.inc, friendValue: 5}, + $inc: { ...params.inc, friendValue: FRIEND.FRIEND_CLOSEPOINT_ADD}, $set: params.set }, { new: true }).lean({ virtuals: true }); } @@ -150,7 +151,7 @@ export default class FriendShip extends BaseModel { public static async addFriendValue(roleId: string, hisRoleId: string, inc: number) { let { roleIds } = util.getRoleIds([roleId, hisRoleId]); let result: FriendShipType = await FriendShipModel.findOneAndUpdate({ roleIds }, { $inc: { friendValue: inc } }, { new: true }) - .select(FRIEND.SEND_PRESENT) + .select(FRIEND_SELECT.SEND_PRESENT) .lean({ virtuals: true }); return result; } diff --git a/shared/pubUtils/dicParam.ts b/shared/pubUtils/dicParam.ts index d054676f8..d5659b061 100644 --- a/shared/pubUtils/dicParam.ts +++ b/shared/pubUtils/dicParam.ts @@ -45,13 +45,25 @@ export const ARMY = { ARMY_DEVELOPMENT_SPEEDTMES: 10, // 单个碎片可助力加速的最大次数 ARMY_TRAIN_FREETIMES: 2, // 练兵场每日挑战次数 ARMY_TRAIN_BUYTIMES: 2, // 练兵场每日可购买次数 - ARMY_TRAIN_TIMESCOST: 20, // 练兵场购买次数每日 + ARMY_TRAIN_TIMESCOST: 20, // 练兵场购买次数消耗 ARMY_WEEKHONOUR_LIMIT: 1000, // 军团成员参与职位排名周功勋下限(包含) ARMY_WISH_TIMES: 1, // 单个许愿池每日可许愿次数 ARMY_WISH_HELP: 3, // 每日可满足他人心愿的次数 ARMY_DONATE_TIMES: 10, // 捐献池每日可捐献的次数 + ARMY_MANAGE_APPLICATION: 50, // 军团管理显示收到的申请条数上限 }; export const TREASURE = { CAPTAIN_DROP: 5, // 普通套装图纸队长必掉落次数 TEAMMATE_DROP: 10, // 普通套装图纸队员必掉落次数 }; +export const FRIEND = { + FRIEND_CLOSEPOINT_ADD: 5, // 每赠送/领取一次增加的亲密度 + FRIEND_FRIENDPOINT_ADD: 1, // 每领取一次爱心会增加的情谊值 + FRIEND_RECONMMEND_LEVEL: 5, // 系统推荐玩家等级要求浮动 + FRIEND_RECONMMEND_ACTIVETIME: 24, // 系统推荐玩家活跃时间要求(小时) + FRIEND_BLACKLIST_MAX: 100, // 黑名单人数上限 + FRIEND_MANAGE_APPLICATION: 50, // 好友显示收到的申请条数上限 + FRIEND_RECEIVE_SINGLE: 1, // 向单个好友每日最多赠送多少爱心 + FRIEND_RECONMMEND_NUM: 8, // 同一批推荐好友数量 + FRIEND_RECONMMEND_SERVICE: 4, // 同一批推荐本服的好友数量 +}; diff --git a/shared/pubUtils/timeUtil.ts b/shared/pubUtils/timeUtil.ts index 2b6312fa0..d4335bbfd 100644 --- a/shared/pubUtils/timeUtil.ts +++ b/shared/pubUtils/timeUtil.ts @@ -1,6 +1,7 @@ const PER_SECOND = 1 * 1000; const PER_DAY = 24 * 60 * 60; +const PER_HOUR = 60 * 60; export function getSeconds(time: Date) { return Math.floor(time.getTime() / PER_SECOND); @@ -37,11 +38,15 @@ export function getBeforeDayDate(day: number) { */ export function getBeforeDaySeconds(day: number) { let time = nowSeconds() - day * PER_DAY; - return time; - - + return time; } +export function getBeforeHourSeconds(hour: number) { + let time = nowSeconds() - hour * PER_HOUR; + return time; +} + + export function getCurWeekDate(day: number, hour: number) { return getWeekDate(new Date(), day, hour); }