好友:赠送领取爱心
This commit is contained in:
+83
-32
@@ -1,6 +1,8 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { getFriendLvByExp } from '../pubUtils/data';
|
||||
import * as util from '../pubUtils/friendUtil';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
|
||||
/**
|
||||
* 好友直接的亲密值
|
||||
@@ -19,12 +21,24 @@ export default class FriendShip extends BaseModel {
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
sendHeartCntA: number; // 玩家A给玩家B送的心
|
||||
@prop({ required: true, default: 0 })
|
||||
sendHeartCntATime: number; // 玩家A给玩家B赠送时间
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
sendHeartCntB: number; // 玩家B给玩家A送的心
|
||||
@prop({ required: true, default: 0 })
|
||||
sendHeartCntBTime: number; // 玩家B给玩家A送的心赠送时间
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
receiveHeartCntA: number; // 玩家B领取玩家A送的心
|
||||
@prop({ required: true, default: 0 })
|
||||
receiveHeartCntATime: number; // 玩家B领取玩家A送的心时间
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
receiveHeartCntB: number; // 玩家A领取玩家B送的心
|
||||
@prop({ required: true, default: 0 })
|
||||
receiveHeartCntBTime: number; // 玩家A领取玩家B送的心时间
|
||||
|
||||
@prop({ required: true, default: new Date() })
|
||||
refTime: Date;
|
||||
|
||||
@@ -35,40 +49,10 @@ export default class FriendShip extends BaseModel {
|
||||
return getFriendLvByExp(this.friendValue);
|
||||
}
|
||||
|
||||
private static getRoleIds(roleIds: string[]) {
|
||||
roleIds.sort();
|
||||
return {
|
||||
roleIdA: roleIds[0],
|
||||
roleIdB: roleIds[1],
|
||||
roleIds: roleIds.join('|')
|
||||
}
|
||||
}
|
||||
|
||||
public static getRoleSendAndReceive(myRoleId: string, roleIds: string[], friendShip: FriendShipType) {
|
||||
let { roleIdA, roleIdB } = this.getRoleIds(roleIds);
|
||||
if (roleIdA == myRoleId) {
|
||||
return {
|
||||
sendHeart: friendShip.sendHeartCntA,
|
||||
beSentHeart: friendShip.sendHeartCntB,
|
||||
recieveHeart: friendShip.receiveHeartCntA,
|
||||
beReceivedHeart: friendShip.receiveHeartCntB
|
||||
}
|
||||
} else if (roleIdB == myRoleId) {
|
||||
return {
|
||||
sendHeart: friendShip.sendHeartCntB,
|
||||
beSentHeart: friendShip.sendHeartCntA,
|
||||
receiveHeart: friendShip.receiveHeartCntB,
|
||||
beReceivedHeart: friendShip.receiveHeartCntA
|
||||
}
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// 创建
|
||||
public static async createFriendShip(roleIdList: string[]) {
|
||||
if (roleIdList.length != 2) return false;
|
||||
let { roleIdA, roleIdB, roleIds } = this.getRoleIds(roleIdList);
|
||||
let { roleIdA, roleIdB, roleIds } = util.getRoleIds(roleIdList);
|
||||
|
||||
const doc = new FriendShipModel();
|
||||
const update = Object.assign(doc.toJSON(), { roleIdA, roleIdB, roleIds });
|
||||
@@ -81,7 +65,7 @@ export default class FriendShip extends BaseModel {
|
||||
// 清空亲密度
|
||||
public static async clearValue(roleIdList: string[]) {
|
||||
if (roleIdList.length != 2) return false;
|
||||
let { roleIds } = this.getRoleIds(roleIdList);
|
||||
let { roleIds } = util.getRoleIds(roleIdList);
|
||||
|
||||
const result: FriendShipType = await FriendShipModel.findOneAndUpdate({ roleIds }, { $set: { friendValue: 0 } }, { new: true }).lean();
|
||||
return result;
|
||||
@@ -93,6 +77,73 @@ export default class FriendShip extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async refreshSendAndReceive(roleId: string, hisRoleId: string) {
|
||||
let { roleIds } = util.getRoleIds([roleId, hisRoleId]);
|
||||
let obj = this.getRefData();
|
||||
const result: FriendShipType = await FriendShipModel.findOneAndUpdate({ roleIds }, {
|
||||
$set: { ...obj }
|
||||
}, { new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
private static getRefData() {
|
||||
return {
|
||||
sendHeartCntA: 0, sendHeartCntB: 0, receiveHeartCntA: 0, receiveHeartCntB: 0, refTime: new Date()
|
||||
}
|
||||
}
|
||||
|
||||
// 赠送爱心
|
||||
public static async sendHeart(roleId: string, hisRoleId: string, inc: number, max: number, shouldRefresh: boolean) {
|
||||
let { roleIds } = util.getRoleIds([roleId, hisRoleId]);
|
||||
let params = util.inputSendCnt(roleId, hisRoleId, {
|
||||
inc: { sendHeart: inc },
|
||||
set: { sendHeartTime: nowSeconds() },
|
||||
lt: { sendHeart: max - inc }
|
||||
});
|
||||
console.log(JSON.stringify(params))
|
||||
if (!params) return false;
|
||||
let result: FriendShipType;
|
||||
if(shouldRefresh) {
|
||||
let obj = this.getRefData();
|
||||
result = await FriendShipModel.findOneAndUpdate({ roleIds }, {
|
||||
$inc: { friendValue: 5},
|
||||
$set: { ...obj, ...params.inc, ...params.set }
|
||||
}, { new: true }).lean({ virtuals: true });
|
||||
} else {
|
||||
result = await FriendShipModel.findOneAndUpdate({ roleIds, ...params.lt }, {
|
||||
$inc: { ...params.inc, friendValue: 5},
|
||||
$set: params.set
|
||||
}, { new: true }).lean({ virtuals: true });
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// 领取爱心
|
||||
public static async receiveHeart(roleId: string, hisRoleId: string, inc: number, max: number, shouldRefresh: boolean) {
|
||||
let { roleIds } = util.getRoleIds([roleId, hisRoleId]);
|
||||
let params = util.inputReceiveCnt(roleId, hisRoleId, {
|
||||
inc: { receiveHeart: inc },
|
||||
set: { receiveHeartTime: nowSeconds() },
|
||||
lt: { receiveHeart: max - inc }
|
||||
});
|
||||
if (!params) return false;
|
||||
|
||||
let result: FriendShipType;
|
||||
if(shouldRefresh) {
|
||||
let obj = this.getRefData();
|
||||
result = await FriendShipModel.findOneAndUpdate({ roleIds }, {
|
||||
$inc: { friendValue: 5},
|
||||
$set: { ...obj, ...params.inc, ...params.set }
|
||||
}, { new: true }).lean({ virtuals: true });
|
||||
} else {
|
||||
result = await FriendShipModel.findOneAndUpdate({ roleIds, ...params.lt }, {
|
||||
$inc: { ...params.inc, friendValue: 5},
|
||||
$set: params.set
|
||||
}, { new: true }).lean({ virtuals: true });
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const FriendShipModel = getModelForClass(FriendShip);
|
||||
|
||||
Reference in New Issue
Block a user