添加远征匹配玩家方法

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

@@ -30,7 +30,6 @@ export default class UserController extends Controller {
public async createRoleData() {
const { ctx } = this;
console.log(ctx.request.body)
const { hid, hlv, eid, elv, ecount, ehid, itemid, itemcount, selectedRowKeys: uids, optType } = ctx.request.body;
if(optType == 'hero') {
ctx.body = await ctx.service.users.createHero(uids, hid, hlv);
@@ -42,4 +41,28 @@ export default class UserController extends Controller {
ctx.body = ctx.service.utils.resResult(STATUS.WRONG_PARMS);
}
}
public async getPveDefense() {
const { ctx } = this;
const { roleId } = ctx.request.body;
ctx.body = await ctx.service.users.getPvpDefense(roleId);
}
public async getHeroList() {
const { ctx } = this;
const { roleId } = ctx.request.body;
ctx.body = await ctx.service.users.getHeroList(roleId);
}
public async saveHeroToDefense() {
const { ctx } = this;
const { roleId, roleName, hid } = ctx.request.body;
ctx.body = await ctx.service.users.saveHeroToDefense(roleId, roleName, hid);
}
public async removeHeroFromDefense() {
const { ctx } = this;
const { roleId, hid } = ctx.request.body;
ctx.body = await ctx.service.users.removeHeroFromDefense(roleId, hid);
}
}

View File

@@ -28,5 +28,11 @@ export default (app: Application) => {
router.post('/api/users/deleterole',tokenParser, controller.users.deleteRole);
router.post('/api/users/getrolelist',tokenParser, controller.users.getrolelist);
router.post('/api/users/createroledata',tokenParser, controller.users.createRoleData);
router.post('/api/users/getpvpdefense',tokenParser, controller.users.getPveDefense);
router.post('/api/users/getherolist',tokenParser, controller.users.getHeroList);
router.post('/api/users/saveherotodefense',tokenParser, controller.users.saveHeroToDefense);
router.post('/api/users/removeherofromdefense',tokenParser, controller.users.removeHeroFromDefense);
};

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
});
}
}

View File

@@ -2,5 +2,11 @@ import { EggAppConfig, PowerPartial } from 'egg';
export default () => {
const config: PowerPartial<EggAppConfig> = {};
config.cluster = {
listen: {
port: 7500
}
};
return config;
};