import {ObjectId} from 'mongodb'; import {ApiCall} from 'tsrpc'; import {CollectionEquip} from '../module/collection_equip'; import {HeroFun} from './hero'; import {call} from './player'; type equipChange = Partial>; export class EquipFun { /** * 修改装备属性 */ static async changeEquipAttr(call: call, equip: Pick & Partial>, change: equipChange, changeHero = true) { if (Object.keys(change).length < 1) return; //穿戴装备时该装备穿戴在另一个英雄身上 if (change.wearaId != undefined && equip.wearaId && equip.wearaId != change.wearaId && changeHero) { let takeHero = await HeroFun.getHero(call, equip.wearaId); if (takeHero) { let _equip = Object.assign({}, takeHero.equip); _equip[G.gc.equip[equip.equipId].type] = ''; await HeroFun.changeHeroAttr(call, takeHero, {equip: _equip}); } } Object.assign(equip, change); for (let k in change) { G.redis.set('equip', call.uid, equip._id, k as keyof CollectionEquip, change[k]); } G.mongodb.collection('equip').updateOne({uid: call.uid, _id: new ObjectId(equip._id)}, {$set: {...change}}); call.addEventMsg('msg_s2c/EquipChange', equip._id, change); } /** * 获取装备 */ static async getEquip(call: ApiCall, oid: string): Promise; static async getEquip(call: ApiCall, oid: string[]): Promise; static async getEquip(call: ApiCall, oid: string | string[]) { if (typeof oid == 'string') { let data = await G.redis.get('equip', call.uid, oid); if (!data) { let {_id, ...info} = await G.mongodb.collection('equip').findOne({ _id: G.mongodb.conversionId(oid) }) data = Object.assign({_id: _id.toHexString()}, info) } return data } else { let equips = await G.mongodb.collection('equip').find({ uid: call.uid, _id: {$in: oid.map(v => G.mongodb.conversionId(v))} }).toArray(); return equips.map(v => G.mongodb.conversionIdObj(v)); } } }