远征结算和宝箱领取
This commit is contained in:
@@ -34,7 +34,8 @@ export const WAR_TYPE = {
|
||||
NORMAL: 1,
|
||||
DAILY: 2,
|
||||
EVENT: 3,
|
||||
TOWER: 4
|
||||
TOWER: 4,
|
||||
EXPEDITION: 5
|
||||
};
|
||||
|
||||
// 事件,是否开启保存随机记录方式
|
||||
@@ -64,6 +65,7 @@ export const EVENT_TYPE = {
|
||||
};
|
||||
|
||||
export const EVENT_START_BATTLE = 101;
|
||||
export const EXPEDITION_INCREASE_POINT = 2; // 远征每成功一次累计的点数
|
||||
|
||||
export const HANG_UP_CONSTS = {
|
||||
ENABLE_LV: 2,
|
||||
|
||||
@@ -4,16 +4,15 @@ import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
||||
/**
|
||||
* 远征记录
|
||||
*/
|
||||
@index({ roleId: 1, eventId: 1 })
|
||||
@index({ roleId: 1, eventCode: 1 })
|
||||
@index({ roleId: 1 })
|
||||
|
||||
export default class ExpeditionPoint extends BaseModel {
|
||||
@prop({ required: true })
|
||||
@prop({ required: true, default: '' })
|
||||
roleId: string; // 角色 id
|
||||
|
||||
@prop({ required: true })
|
||||
@prop({ required: true, default: 0 })
|
||||
pointCost: number; // 消耗点数
|
||||
@prop({ required: true })
|
||||
@prop({ required: true, default: false })
|
||||
completed: boolean; // 本轮奖励是否完成
|
||||
@prop({ required: true, default: [] })
|
||||
rewards: Array<{point: number, reward: string, received:boolean, recTime: Date}>; // 领取记录
|
||||
@@ -22,6 +21,23 @@ export default class ExpeditionPoint extends BaseModel {
|
||||
const result = await ExpeditionPointModel.findOne({ roleId, completed: false }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async updatePointStatus(roleId: string, point: number, reward: string, lean = true) {
|
||||
const result = await ExpeditionPointModel.findOneAndUpdate(
|
||||
{ roleId, completed: false },
|
||||
{ $set: { pointCost: point }, $push: {rewards:{point, reward, received: true, recTime: new Date()}}},
|
||||
{ new: true, upsert: true }
|
||||
).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async completeStatus(roleId: string, lean = true) {
|
||||
const result = await ExpeditionPointModel.findOneAndUpdate(
|
||||
{ roleId, completed: false },
|
||||
{ $set: {completed: true } }
|
||||
).lean(lean);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const ExpeditionPointModel = getModelForClass(ExpeditionPoint);
|
||||
|
||||
@@ -1,33 +1,74 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
||||
|
||||
class Heroes {
|
||||
@prop({ required: true })
|
||||
hid: number; // 敌人id
|
||||
@prop({ required: true })
|
||||
hp: number; // 血量
|
||||
@prop({ required: true })
|
||||
ap: number; // 怒气
|
||||
}
|
||||
|
||||
/**
|
||||
* 远征记录
|
||||
*/
|
||||
@index({ roleId: 1, eventId: 1 })
|
||||
@index({ roleId: 1, eventCode: 1 })
|
||||
@index({ roleId: 1 })
|
||||
@index({ expeditionCode: 1 })
|
||||
|
||||
export default class ExpeditionRecord extends BaseModel {
|
||||
@prop({ required: true })
|
||||
@prop({ required: true, default: '' })
|
||||
roleId: string; // 角色 id
|
||||
@prop({ required: true })
|
||||
@prop({ required: true, default: '' })
|
||||
roleName: string; // 角色 名
|
||||
@prop({ required: true })
|
||||
@prop({ required: true, default: '' })
|
||||
expeditionCode: string; // 远征的唯一标识
|
||||
@prop({ required: true })
|
||||
@prop({ required: true, default: 0 })
|
||||
time: number; // 时间
|
||||
@prop({ required: true })
|
||||
heroes: Array<{hid: number, hp: number, cp: number}>; // 我方已出场武将
|
||||
@prop({ required: true, type: Heroes, default: [] })
|
||||
heroes: Array<Heroes>; // 我方已出场武将
|
||||
|
||||
|
||||
public static async getTodayRecord(roleId: string, time: number, lean = true) {
|
||||
const role = await ExpeditionRecordModel.findOne({ roleId, time }).lean(lean);
|
||||
return role;
|
||||
const result = await ExpeditionRecordModel.findOne({ roleId, time }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async createTodayRecord(expeditionCode: string, params: { roleId: string, roleName: string, time: number, heroes: Array<{hid: number, hp: number, cp: number}> }, lean = true) {
|
||||
const role = await ExpeditionRecordModel.findOneAndUpdate({ expeditionCode }, params, { new: true, upsert: true }).lean(lean);
|
||||
return role;
|
||||
public static async createTodayRecord(expeditionCode: string, params: { roleId: string, roleName: string, time: number, heroes: Array<Heroes> }, lean = true) {
|
||||
const result = await ExpeditionRecordModel.findOneAndUpdate({ expeditionCode }, params, { new: true, upsert: true }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async getExpeditionRecordByCode(expeditionCode: string, lean=true) {
|
||||
const result = await ExpeditionRecordModel.findOne({expeditionCode}).lean(lean);
|
||||
return result
|
||||
}
|
||||
|
||||
public static async updateHeroStatus(expeditionCode: string, oldHeroes: Array<Heroes>, heroes: Array<{actorId: number, hp: number, ap: number}>, lean=true) {
|
||||
let pushArr = new Array(), updateArr = new Array();
|
||||
for(let hero of heroes) {
|
||||
let {actorId, hp, ap} = hero;
|
||||
let obj = oldHeroes.find(cur => cur.hid == actorId);
|
||||
|
||||
if(!!obj) {
|
||||
updateArr.push({hid: actorId, hp, ap});
|
||||
} else {
|
||||
pushArr.push({hid: actorId, hp, ap})
|
||||
}
|
||||
}
|
||||
console.log(JSON.stringify(oldHeroes), JSON.stringify(heroes), JSON.stringify(pushArr), JSON.stringify(updateArr))
|
||||
for(let {hid, hp, ap} of updateArr) {
|
||||
await ExpeditionRecordModel.findOneAndUpdate(
|
||||
{expeditionCode, 'heroes.hid': hid },
|
||||
{$set: {'heroes.$.hid': hid, 'heroes.$.hp': hp, 'heroes.$.ap': ap}}
|
||||
)
|
||||
}
|
||||
const result = await ExpeditionRecordModel.findOneAndUpdate(
|
||||
{ expeditionCode },
|
||||
{ $push: {heroes: {$each: pushArr} } }
|
||||
)
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,44 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
||||
|
||||
class Enemies {
|
||||
@prop({ required: true })
|
||||
actorId: number; // 敌人id
|
||||
@prop({ required: false })
|
||||
actorName: string; // 敌人名
|
||||
@prop({ required: false })
|
||||
dataId: number; // 战场中唯一指向武将的代码
|
||||
@prop({ required: false })
|
||||
relation: number; // 角色属于我方还是地方
|
||||
@prop({ required: false })
|
||||
outIndex: number; // 程序将信息存入数组顺序
|
||||
@prop({ required: false })
|
||||
x: number; // 战场x坐标
|
||||
@prop({ required: false })
|
||||
y: number; // 战场y坐标
|
||||
@prop({ required: false })
|
||||
direction: number; // 朝向
|
||||
@prop({ required: false })
|
||||
var: number; // 变量
|
||||
@prop({ required: false })
|
||||
lv: number; // 角色等级
|
||||
@prop({ required: false })
|
||||
hide: number; // 是否隐藏
|
||||
@prop({ required: false })
|
||||
initial_ai: number; // AI类型
|
||||
@prop({ required: true })
|
||||
attribute: {hp: number, atk: number, matk: number, def: number, mdef: number, agi: number, luk: number, speed: number, hit: number, cri: number, flee: number, antCri: number, damageIncrease: number, damageDecrease: number, defIgnore: number, bloodSuck: number, ap: number}; // 属性
|
||||
@prop({ required: false })
|
||||
skill: string; // 技能
|
||||
@prop({ required: false })
|
||||
seid: string; // 技能
|
||||
@prop({ required: false })
|
||||
star: number; // 角色星级
|
||||
@prop({ required: false })
|
||||
spine: string; // S动画
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 远征记录
|
||||
*/
|
||||
@@ -18,7 +56,7 @@ export default class ExpeditionWarRecord extends BaseModel {
|
||||
@prop({ required: true, default: '' })
|
||||
battleCode: string; // 关联关卡唯一值
|
||||
@prop({ required: true, default: 0 })
|
||||
battleStatus: number; // 是否通过
|
||||
battleStatus: number; // 是否通过, 0-挑战中 1-成功 2-挑战失败
|
||||
@prop({ required: true, default: false })
|
||||
received: boolean; // 本关战胜后宝箱是否领取
|
||||
@prop({ required: true, default: false })
|
||||
@@ -27,8 +65,8 @@ export default class ExpeditionWarRecord extends BaseModel {
|
||||
enemyFrom: number; // 敌军数据来源:1-配表的敌军队,2-玩家
|
||||
@prop({ required: true, default: '' })
|
||||
enemyId: string; // 敌军队伍id或玩家id
|
||||
@prop({ required: true, default: [] })
|
||||
enemies: Array<any>; // 敌军数据
|
||||
@prop({ required: true, type: Enemies, default: [] })
|
||||
enemies: Array<Enemies>; // 敌军数据
|
||||
|
||||
public static async getRecordByCode(expeditionCode: string, lean = true) {
|
||||
const result = await ExpeditionWarRecordModel.find({ expeditionCode }).select('expeditionId battleId battleCode battleStatus received').sort({expeditionId: 1}).lean(lean);
|
||||
@@ -47,6 +85,32 @@ export default class ExpeditionWarRecord extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async updateStatus(expeditionCode: string, expeditionId: number, battleStatus: number, battleCode: string, lean = true) {
|
||||
const result = await ExpeditionWarRecordModel.findOneAndUpdate({ expeditionCode, expeditionId }, {battleStatus, battleCode}, {new: true}).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async updateEnemiesStatus(expeditionCode: string, expeditionId: number, battleStatus: number, enemies: Array<{dataId: number, hp: number, ap: number}>, lean = true) {
|
||||
|
||||
for(let {dataId, hp, ap} of enemies) {
|
||||
console.log('updateEnemiesStatus',ap)
|
||||
await ExpeditionWarRecordModel.findOneAndUpdate(
|
||||
{expeditionCode, expeditionId, 'enemies.dataId': dataId },
|
||||
{$set: {'enemies.$.attribute.hp': hp, 'enemies.$.attribute.ap': ap}}
|
||||
)
|
||||
}
|
||||
const result = ExpeditionWarRecordModel.findOneAndUpdate(
|
||||
{expeditionCode, expeditionId},
|
||||
{$set: {battleStatus}},
|
||||
{new: true}
|
||||
);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async updateBoxStatus(expeditionCode: string, expeditionId: number, received: boolean, reward: string, lean = true) {
|
||||
const result = await ExpeditionWarRecordModel.findOneAndUpdate({ expeditionCode, expeditionId }, {received, reward}, {new: true}).lean(lean);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const ExpeditionWarRecordModel = getModelForClass(ExpeditionWarRecord);
|
||||
|
||||
@@ -137,13 +137,18 @@ export default class Role extends BaseModel {
|
||||
|
||||
|
||||
public static async setEventStatus(roleId: string, eventStatus: number, lean = true) {
|
||||
await RoleModel.findOneAndUpdate({ roleId }, { eventStatus }).lean(lean);
|
||||
await RoleModel.findOneAndUpdate({ roleId }, { eventStatus }, {new: true}).lean(lean);
|
||||
}
|
||||
|
||||
public static async towerLvUp(roleId: string, lean = true) {
|
||||
let role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerLv: 1}}).lean(lean);
|
||||
return role;
|
||||
}
|
||||
|
||||
public static async increaseExpeditionPoint(roleId: string, point: number, lean = true) {
|
||||
let role = await RoleModel.findOneAndUpdate({roleId}, {$inc: { expeditionPoint: point }}, {new: true}).lean(lean);
|
||||
return role;
|
||||
}
|
||||
}
|
||||
|
||||
export const RoleModel = getModelForClass(Role);
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -13,7 +13,7 @@
|
||||
"hide": 0,
|
||||
"initial_ai": 1,
|
||||
"bossid": 0,
|
||||
"attribute": "1&1000|2&2000|3&3000",
|
||||
"attribute": "1&1000|2&2000|3&3000|17&100",
|
||||
"skill": "&",
|
||||
"seid": "&",
|
||||
"star": 0,
|
||||
@@ -33,7 +33,7 @@
|
||||
"hide": 0,
|
||||
"initial_ai": 1,
|
||||
"bossid": 0,
|
||||
"attribute": "&",
|
||||
"attribute": "1&1000|2&2000|3&3000|17&100",
|
||||
"skill": "&",
|
||||
"seid": "&",
|
||||
"star": 0,
|
||||
@@ -53,7 +53,7 @@
|
||||
"hide": 0,
|
||||
"initial_ai": 1,
|
||||
"bossid": 0,
|
||||
"attribute": "&",
|
||||
"attribute": "1&1000|2&2000|3&3000|17&100",
|
||||
"skill": "&",
|
||||
"seid": "&",
|
||||
"star": 0,
|
||||
@@ -73,7 +73,7 @@
|
||||
"hide": 0,
|
||||
"initial_ai": 1,
|
||||
"bossid": 0,
|
||||
"attribute": "&",
|
||||
"attribute": "1&1000|2&2000|3&3000|17&100",
|
||||
"skill": "&",
|
||||
"seid": "&",
|
||||
"star": 0,
|
||||
@@ -93,7 +93,7 @@
|
||||
"hide": 0,
|
||||
"initial_ai": 1,
|
||||
"bossid": 0,
|
||||
"attribute": "&",
|
||||
"attribute": "1&1000|2&2000|3&3000|17&100",
|
||||
"skill": "&",
|
||||
"seid": "&",
|
||||
"star": 0,
|
||||
|
||||
Reference in New Issue
Block a user