添加远征匹配玩家方法
This commit is contained in:
@@ -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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user