添加远征匹配玩家方法

This commit is contained in:
luying
2020-10-28 19:29:59 +08:00
parent 3377e0f99c
commit 222b9c6e12
11 changed files with 282 additions and 27 deletions

View File

@@ -1,6 +1,6 @@
import { UserModel } from '@db/User';
import { RoleModel } from '@db/Role';
import { HeroModel } from '@db/Hero';
import Hero, { HeroModel } from '@db/Hero';
import { EquipModel } from '@db/Equip';
import { CounterModel } from '@db/Counter';
import { ActionPointModel } from '@db/ActionPoint';
@@ -17,6 +17,7 @@ import { HangUpSpdUpRecModel } from '@db/HangUpSpdUpRec';
import { SearchRecordModel } from '@db/SearchRecord';
import { TowerRecordModel } from '@db/TowerRecord';
import { TowerTaskRecModel } from '@db/TowerTaskRec';
import { PvpDefenseModel } from '@db/PvpDefense';
import { Service } from 'egg';
import Counter from '@db/Counter';
@@ -110,6 +111,7 @@ export default class GMUsers extends Service {
await SearchRecordModel.deleteAccount(roleId);
await TowerTaskRecModel.deleteAccount(roleId);
await TowerRecordModel.deleteAccount(roleId);
await PvpDefenseModel.deleteAccount(roleId);
return ctx.service.utils.resResult(STATUS.SUCCESS);
}
@@ -158,10 +160,13 @@ export default class GMUsers extends Service {
let heroCount = await HeroModel.count({roleId: role.roleId}).lean();
let equipCount = await EquipModel.count({roleId: role.roleId}).lean();
let itemCount = (role.consumeGoods?role.consumeGoods.length: 0) + (role.souls?role.souls.length:0);
let defense = await PvpDefenseModel.findByRoleId(role.roleId);
let {roleId, roleName, serverId, lv, vLv, gold, coin} = role;
let {uid, tel} = role.userInfo;
result.push({
key: roleId, roleId, roleName, serverId, lv, vLv, uid, tel, heroCount, equipCount, itemCount, gold, coin
key: roleId, roleId, roleName, serverId, lv, vLv, uid, tel, heroCount, equipCount, itemCount, gold, coin,
hasDefense: defense?'是':'否', defCe: defense?defense.ce:0
});
}
return ctx.service.utils.resResult(STATUS.SUCCESS, { list: result });
@@ -284,4 +289,104 @@ export default class GMUsers extends Service {
return ctx.service.utils.resResult(STATUS.SUCCESS, { uids });
}
}
public async getPvpDefense(roleId: string) {
const {ctx} = this;
let result = await PvpDefenseModel.findByRoleId(roleId);
return ctx.service.utils.resResult(STATUS.SUCCESS, {
hasDefense: !!result, defense: result
})
}
public async getHeroList(roleId: string) {
const {ctx} = this;
let herolist = await HeroModel.findByRole(roleId);
let defense = await PvpDefenseModel.findByRoleId(roleId);
let result = Array<Hero>();
for(let hero of herolist) {
if(defense) {
let {heroes = []} = defense;
let curHero = heroes.find(cur => cur.actorId == hero.hid);
if(!curHero) {
result.push(hero);
}
} else{
result.push(hero);
}
}
return ctx.service.utils.resResult(STATUS.SUCCESS, {
heroes: result
})
}
public async saveHeroToDefense(roleId: string, roleName: string, hid: number) {
const {ctx} = this;
let hero = await HeroModel.findByHidAndRole(hid, roleId);
if(!hero) {
return ctx.service.utils.resResult(STATUS.GM_HERO_NOT_FOUND);
}
let { lv } = hero;
let dicHero = ctx.service.utils.getHeroById(hid);
let { hp, hp_up, atk, atk_up, matk, matk_up, def, def_up, mdef, mdef_up } = dicHero;
let ce = ctx.service.utils.calculateCE({hid, lv});
let heroInfo = {
actorId: dicHero.heroId,
actorName: dicHero.name,
attribute: {
hp: hp + lv * hp_up,
atk: atk + lv * atk_up,
matk: matk + lv * matk_up,
def: def + lv * def_up,
mdef: mdef + lv * mdef_up,
agi: 0,
luk: 0,
speed: 0,
hit: 0,
cri: 0,
flee: 0,
antCri: 0,
damageIncrease: 0,
damageDecrease: 0,
defIgnore: 0,
bloodSuck: 0,
ap: 0
},
lv,
ce
};
let defense = await PvpDefenseModel.findByRoleId(roleId);
if(!defense) {
defense = await PvpDefenseModel.createPvpDefense({roleId, roleName, heroes: [heroInfo], ce});
} else {
defense = await PvpDefenseModel.addHeroToDefense(roleId, heroInfo, ce);
}
return ctx.service.utils.resResult(STATUS.SUCCESS, {
defense
});
}
public async removeHeroFromDefense(roleId: string, hid: number) {
const {ctx} = this;
let defense = await PvpDefenseModel.findByRoleId(roleId);
if(!defense) {
return ctx.service.utils.resResult(STATUS.GM_PVP_DEFENSE_NOT_FOUND);
}
let {heroes} = defense;
let curHero = heroes.find(cur => cur.actorId == hid);
if(!curHero) {
return ctx.service.utils.resResult(STATUS.GM_PVP_DEFENSE_HERO_NOT_FOUND);
}
defense = await PvpDefenseModel.removeHeroFromDefense(roleId, hid, curHero.ce);
return ctx.service.utils.resResult(STATUS.SUCCESS, {
defense
});
}
}