物品:获取装备上限
This commit is contained in:
@@ -36,6 +36,7 @@ export enum MAIL_TYPE {
|
||||
GUILD_DIVIDEND = 15, // 拍卖行分红
|
||||
MONTHLY_REWARD = 16, // 月卡奖品
|
||||
AUTION_REWARD = 17, // 拍卖行忘领取奖励
|
||||
EQUIP_OVER = 18, // 拍卖行忘领取奖励
|
||||
};
|
||||
|
||||
export const SEND_NAME = '系统';
|
||||
@@ -3,6 +3,7 @@ import { index, getModelForClass, prop, DocumentType, modelOptions } from '@type
|
||||
import { COUNTER } from '../consts';
|
||||
import { CounterModel } from './Counter';
|
||||
import { HeroModel } from './Hero';
|
||||
import { RoleModel } from './Role';
|
||||
|
||||
export class RandSe {
|
||||
@prop({ required: true })
|
||||
@@ -98,6 +99,16 @@ export default class Equip extends BaseModel {
|
||||
return equip;
|
||||
}
|
||||
|
||||
public static async createEquips(roleId: string, equipInfos: equipUpdate[]) {
|
||||
let result: EquipType[] = [];
|
||||
for(let equipInfo of equipInfos) {
|
||||
let equip = await this.createEquip(equipInfo);
|
||||
result.push(equip);
|
||||
}
|
||||
await RoleModel.increaseEquip(roleId, result.length);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async putOnOrOff(equipId: string, hid: number, lean = true) {
|
||||
const equip: EquipType = await EquipModel.findOneAndUpdate({ _id: equipId }, { hid }, { new: true }).lean(lean);
|
||||
return equip;
|
||||
@@ -113,8 +124,9 @@ export default class Equip extends BaseModel {
|
||||
let result = await EquipModel.deleteMany({ roleId });
|
||||
return result;
|
||||
}
|
||||
public static async deleteEquips(ids: Array<number>) {
|
||||
let result = await EquipModel.deleteMany({ seqId: { $in: ids } });
|
||||
public static async deleteEquips(roleId: string, ids: Array<number>) {
|
||||
let result = await EquipModel.deleteMany({ roleId, seqId: { $in: ids } });
|
||||
await RoleModel.findOneAndUpdate({ roleId }, { $inc: { equipCount: -1 * ids.length } }, { new: true });
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import { reduceCe } from '../pubUtils/util';
|
||||
export class Heroes {
|
||||
@prop({ required: true })
|
||||
actorId: number; // 武将id
|
||||
@prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId })
|
||||
@prop({ ref: 'Hero', type: mongoose.Schema.Types.ObjectId })
|
||||
hero: Ref<Hero>;
|
||||
@prop({ required: true })
|
||||
ce: number; // 战斗力
|
||||
|
||||
@@ -6,7 +6,7 @@ import { shouldRefresh, reduceCe } from '../pubUtils/util';
|
||||
import { initRoleAtrr } from '../pubUtils/playerCe';
|
||||
import { nowSeconds, getTimeFunD } from '../pubUtils/timeUtil';
|
||||
import { Figure } from '../domain/dbGeneral';
|
||||
import { EXTERIOR } from '../pubUtils/dicParam';
|
||||
import { BAG, EXTERIOR } from '../pubUtils/dicParam';
|
||||
import Hero from './Hero';
|
||||
|
||||
// role表属性格式
|
||||
@@ -28,7 +28,7 @@ class TopHero {
|
||||
hid: number; // 武将id
|
||||
@prop({ required: true })
|
||||
ce: number; // 战力
|
||||
@prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId })
|
||||
@prop({ ref: 'Hero', type: mongoose.Schema.Types.ObjectId })
|
||||
hero: Ref<Hero>;
|
||||
}
|
||||
|
||||
@@ -181,6 +181,8 @@ export default class Role extends BaseModel {
|
||||
totalCost: number; // 金币总花费
|
||||
@prop({ required: true, default: [] })
|
||||
payRecord: PayRecord[]; // 支付记录
|
||||
@prop({ required: true, default: 0 })
|
||||
equipCount: number; // 装备数量
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
coin: number; // 总铜钱
|
||||
@@ -403,6 +405,46 @@ export default class Role extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async increaseGoldAndCoin(roleId: string, gold: {count: number, isPay: boolean}[], coin: number) {
|
||||
let paidGold = 0, giftGold = 0, addGold = 0;
|
||||
for(let { count, isPay } of gold) {
|
||||
addGold += count;
|
||||
if(isPay) {
|
||||
paidGold += count;
|
||||
} else {
|
||||
giftGold += count;
|
||||
}
|
||||
}
|
||||
let result: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { gold: addGold, paidGold, giftGold, coin } }, { new: true }).lean();
|
||||
if(result.gold > BAG.BAG_GOODS_UPLIMITED) {
|
||||
result = await RoleModel.findOneAndUpdate({ roleId, gold: { $gte: BAG.BAG_GOODS_UPLIMITED } }, { $set: { gold: BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean();
|
||||
}
|
||||
if(result.coin > BAG.BAG_GOODS_UPLIMITED) {
|
||||
result = await RoleModel.findOneAndUpdate({ roleId, coin: { $gte: BAG.BAG_GOODS_UPLIMITED } }, { $set: { coin: BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async decreaseGoldAndCoin(roleId: string, gold: {count: number, isPay: boolean}[], coin: number) {
|
||||
let paidGold = 0, giftGold = 0, addGold = 0;
|
||||
for(let { count, isPay } of gold) {
|
||||
addGold += count;
|
||||
if(isPay) {
|
||||
paidGold += count;
|
||||
} else {
|
||||
giftGold += count;
|
||||
}
|
||||
}
|
||||
let result: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { gold: -1 * addGold, paidGold: -1 * paidGold, giftGold: -1 * giftGold, totalCost: addGold, coin: -1 * coin } }, { new: true }).lean();
|
||||
if(result.gold > BAG.BAG_GOODS_UPLIMITED) {
|
||||
result = await RoleModel.findOneAndUpdate({ roleId, gold: { $gte: BAG.BAG_GOODS_UPLIMITED } }, { $set: { gold: BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean();
|
||||
}
|
||||
if(result.coin > BAG.BAG_GOODS_UPLIMITED) {
|
||||
result = await RoleModel.findOneAndUpdate({ roleId, coin: { $gte: BAG.BAG_GOODS_UPLIMITED } }, { $set: { coin: BAG.BAG_GOODS_UPLIMITED } }, { new: true }).lean();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async pushWarStar(roleId: string, battleId: number, warType: number, star: number, lean = true) {
|
||||
let result: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $addToSet: { warStar: { id: battleId, warType, star } } }, { "new": true, "upsert": true }).lean(lean);
|
||||
return result;
|
||||
@@ -645,6 +687,12 @@ export default class Role extends BaseModel {
|
||||
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $push: { rankReceived: { $each: ids } } }, { new: true }).lean();
|
||||
return role;
|
||||
}
|
||||
|
||||
// 装备上限
|
||||
public static async increaseEquip(roleId: string, count: number) {
|
||||
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { equipCount: count } }, { new: true }).lean();
|
||||
return role;
|
||||
}
|
||||
}
|
||||
|
||||
export const RoleModel = getModelForClass(Role);
|
||||
|
||||
@@ -7,16 +7,15 @@ export interface RewardInter {
|
||||
count: number;
|
||||
}
|
||||
|
||||
export interface EquipInter {
|
||||
id: number;
|
||||
export interface ItemInter {
|
||||
id?: number;
|
||||
count?: number;
|
||||
seqId?: number;
|
||||
type?: number;
|
||||
isPay?: boolean;
|
||||
hid?: number;
|
||||
times?: number;
|
||||
};
|
||||
|
||||
|
||||
export interface BagInter { id: number, itemName: string, count: number, type: number, hid: number, times?: number };
|
||||
export interface ItemInter { id?: number, count?: number, seqId?: number, type?: number };
|
||||
|
||||
// 百家学宫,布阵武将位置
|
||||
export interface SclPosInter {
|
||||
id: number;
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
|
||||
import { HeroModel, HeroType } from '../db/Hero';
|
||||
import { ItemModel } from '../db/Item';
|
||||
import { EquipModel, RandSe, Holes, RandMain } from './../db/Equip';
|
||||
import { BagInter, EquipInter } from './interface';
|
||||
import { EquipModel, RandSe, Holes, RandMain, equipUpdate } from './../db/Equip';
|
||||
import { gameData, getQuenchByQualityAndGrade, getQuenchGradeByValue } from './data';
|
||||
import { RANDOM_SE_COUNT, ITID, CURRENCY_BY_TYPE, CURRENCY_TYPE, ROLE_SELECT, FIGURE_UNLOCK_CONDITION, CONSUME_TYPE, HERO_SYSTEM_TYPE, TASK_TYPE } from '../consts';
|
||||
import { getRandValueByMinMax, getRandEelm } from './util';
|
||||
@@ -16,6 +15,7 @@ import { calPlayerCeAndSave, reCalAllHeroCe } from './playerCe';
|
||||
import { checkTask, checkTaskWithHeroes, checkTaskWithEquip, accomplishTask } from './taskUtil';
|
||||
import { CreateHeroParam } from '../domain/roleField/hero';
|
||||
import { SkinModel } from '../db/Skin';
|
||||
import { TaskListReturn } from '../domain/roleField/task';
|
||||
|
||||
/**
|
||||
* 添加皮肤
|
||||
@@ -48,13 +48,44 @@ export async function addSkin(roleId: string, roleName: string, skinId: number,
|
||||
}
|
||||
}
|
||||
|
||||
export async function addBags(roleId: string, roleName: string, data: BagInter) {
|
||||
let { id, count, itemName, type, hid } = data;
|
||||
export async function addBags(roleId: string, roleName: string, datas: { id: number, count: number }[]) {
|
||||
let items: { id: number, count: number }[] = [];
|
||||
for(let data of datas) {
|
||||
let item = await addBag(roleId, roleName, data);
|
||||
items.push(item)
|
||||
}
|
||||
return { items }
|
||||
}
|
||||
|
||||
export async function addBag(roleId: string, roleName: string, data: { id: number, count: number }) {
|
||||
let { id, count } = data;
|
||||
let { name: itemName, itid, hid } = gameData.goods.get(id);
|
||||
let { type } = ITID.get(itid);
|
||||
|
||||
let item = await ItemModel.increaseItem(roleId, id, count, { roleId, roleName, itemName, id, type, hid });
|
||||
return { id: item.id, count: item.count };
|
||||
}
|
||||
|
||||
export async function addEquips(roleId: string, roleName: string, weapon: EquipInter) {
|
||||
|
||||
export async function addEquips(roleId: string, roleName: string, weapons: { id: number, hid?: number }[]) {
|
||||
let equipInfos: equipUpdate[] = [];
|
||||
for(let weapon of weapons) {
|
||||
let info = await getAddEquipInfo(roleId, roleName, weapon);
|
||||
equipInfos.push(info);
|
||||
}
|
||||
|
||||
const equips = await EquipModel.createEquips(roleId, equipInfos);
|
||||
let pushMessages: TaskListReturn[] = [];
|
||||
// 任务
|
||||
for(let equip of equips) {
|
||||
let pushMessage = await checkTaskWithEquip(roleId, TASK_TYPE.EQUIP_SUIT, equip);
|
||||
pushMessages = [...pushMessages, ...pushMessage];
|
||||
}
|
||||
|
||||
return { equips, pushMessages }
|
||||
}
|
||||
|
||||
export async function getAddEquipInfo(roleId: string, roleName: string, weapon: { id: number, hid?: number }) {
|
||||
let { id, hid = 0 } = weapon;
|
||||
let { name, quality, suitId, hole, randomEffect, itid, goodsAbility } = gameData.goods.get(id);
|
||||
let { type } = ITID.get(itid);
|
||||
@@ -84,6 +115,7 @@ export async function addEquips(roleId: string, roleName: string, weapon: EquipI
|
||||
if(attrValue > 0) {
|
||||
let { min, max } = getQuenchByQualityAndGrade(quality, grade);
|
||||
let rand = getRandValueByMinMax(min, max, 0);
|
||||
console.log(quality, grade, rand)
|
||||
grade = getQuenchGradeByValue(quality, rand);
|
||||
randMain.push({
|
||||
id: attrId,
|
||||
@@ -98,12 +130,7 @@ export async function addEquips(roleId: string, roleName: string, weapon: EquipI
|
||||
holes.push({ id: i + 1, isOpen: false, jewel: 0 });
|
||||
}
|
||||
|
||||
const equip = await EquipModel.createEquip({ roleId, roleName, id, name, quality, suitId, randRange, ePlaceId: type, randSe, holes, hid, grade, randMain });
|
||||
|
||||
// 任务
|
||||
let pushMessage = await checkTaskWithEquip(roleId, TASK_TYPE.EQUIP_SUIT, equip);
|
||||
|
||||
return { equipInfo: equip, pushMessage }
|
||||
return { roleId, roleName, id, name, quality, suitId, randRange, ePlaceId: type, randSe, holes, hid, grade, randMain };
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -251,7 +251,8 @@ export function getRandValue(base: number, ratio: number, decimal = 2): number {
|
||||
* @param decimal 返回值保留的小数位数
|
||||
*/
|
||||
export function getRandValueByMinMax(min: number, max: number, decimal = 2): number {
|
||||
return parseFloat((min + (max - min) * Math.random()).toFixed(decimal));
|
||||
let pow = Math.pow(10, decimal);
|
||||
return Math.floor((min + (max - min) * Math.random()) * pow)/pow;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -88,5 +88,10 @@
|
||||
"id": 17,
|
||||
"content": "<color= #000000>亲爱的小将军,您昨日的拍卖分红忘记领取了,现已通过邮件发放,请查收</color>",
|
||||
"time": 24
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"content": "<color= #000000>超过的装备放这里</color>",
|
||||
"time": 24
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user