添加百家学宫和名将谱,未计算战力

This commit is contained in:
luying
2020-12-25 15:01:32 +08:00
parent 432fa67105
commit 21ab617e90
13 changed files with 335 additions and 24 deletions

View File

@@ -1,16 +1,15 @@
import { STATUS } from '../../../consts/statusCode';
import { RoleModel } from './../../../db/Role';
import { CounterModel } from '../../../db/Counter';
import { HeroModel } from '../../../db/Hero';
import { EquipModel } from '../../../db/Equip';
import { calculateCE, resResult } from '../../../pubUtils/util';
import {Application, BackendSession, createTcpMailBox} from 'pinus';
import { COUNTER } from '../../../consts';
import { resResult, decodeIdCntArrayStr, parseGoodStr } from '../../../pubUtils/util';
import {Application, BackendSession} from 'pinus';
import { handleCost } from '../../../services/rewardService';
import { getTitle, getTeraph } from '../../../pubUtils/data';
import { SSL_OP_SSLEAY_080_CLIENT_DH_BUG } from 'constants';
import { getTitle, getTeraph, gameData } from '../../../pubUtils/data';
import { SCHOOL, SCROLL } from '../../../pubUtils/dicParam';
import { getTeraphAttr } from '../../../consts/constModules/abilityConst'
const _ = require('underscore');
import { SclResultInter, SclPosInter } from '../../../pubUtils/interface';
import { SchoolModel } from '../../../db/School';
export default function(app: Application) {
return new RoleHandler(app);
@@ -164,4 +163,177 @@ export class RoleHandler {
await RoleModel.updateRoleInfo(roleId, { teraphs: role.teraphs });
return resResult(STATUS.SUCCESS, { roleId, teraphs: role.teraphs });
}
// 获得百家学宫
async getSchoolList(msg: {}, session: BackendSession) {
let roleId = session.get('roleId');
const dicPosition = decodeIdCntArrayStr(SCHOOL.SCHOOL_POSITION, 1); // id=>isOpen
const userSchoolList = await SchoolModel.findByRoleId(roleId);
let school = new Array<SclResultInter>();
gameData.school.forEach((dicSchool) => {
let position = new Array<SclPosInter>();
dicPosition.forEach((isOpen, id) => {
id = parseInt(id);
let userSchool = userSchoolList.find(cur => cur.schoolId == dicSchool.id && cur.positionId == id);
if (userSchool) {
position.push({
id,
hid: userSchool.hid,
isOpen: userSchool.isOpen
});
} else {
position.push({
id,
hid: 0,
isOpen: !!isOpen
});
}
});
school.push({
id: dicSchool.id,
position
});
});
return resResult(STATUS.SUCCESS, { school });
}
// 摆放/替换/卸下武将
async changeSchoolHero(msg: { schoolId: number, positionId: number, hid: number }, session: BackendSession) {
let roleId = session.get('roleId');
let sid = session.get('sid');
let { schoolId, positionId, hid } = msg;
if (!gameData.school.has(schoolId)) {
return resResult(STATUS.DIC_DATA_NOT_FOUND);
}
const dicPosition = decodeIdCntArrayStr(SCHOOL.SCHOOL_POSITION, 1); // id(str) => isOpen
if (!dicPosition.has(positionId.toString())) {
return resResult(STATUS.DIC_DATA_NOT_FOUND);
}
let isOpen = !!dicPosition.get(positionId.toString()); // 该位置是否解锁
let findHero = await SchoolModel.findByHid(roleId, hid);
if (!!findHero) {
return resResult(STATUS.ROLE_SCHOOL_HERO_USED);
}
let curSchool = await SchoolModel.findBySclAndPos(roleId, schoolId, positionId);
let preHid = 0; // 原先在该位置上的武将
if (curSchool) {
isOpen = curSchool.isOpen;
preHid = curSchool.hid;
}
let curHero = await HeroModel.findByHidAndRole(hid, roleId);
if (!curHero) return resResult(STATUS.HERO_NOT_FIND);
if (!isOpen) {
return resResult(STATUS.ROLE_SCHOOL_POSITION_LOCKED);
}
await SchoolModel.updateBySclAndPos(roleId, schoolId, positionId, { hid, isOpen })
return resResult(STATUS.SUCCESS, {
schoolId, positionId, hid, preHid, isOpen
});
}
// 解锁位置
async unlockSchoolPosition(msg: { schoolId: number, positionId: number }, session: BackendSession) {
let roleId = session.get('roleId');
let sid = session.get('sid');
let { schoolId, positionId } = msg;
if (!gameData.school.has(schoolId)) {
return resResult(STATUS.DIC_DATA_NOT_FOUND);
}
const dicPosition = decodeIdCntArrayStr(SCHOOL.SCHOOL_POSITION, 1); // id(str) => isOpen
if (!dicPosition.has(positionId.toString())) {
return resResult(STATUS.DIC_DATA_NOT_FOUND);
}
let isOpen = !!dicPosition.get(positionId.toString()); // 该位置是否解锁
if (isOpen) {
return resResult(STATUS.ROLE_SCHOOL_POSITION_UNLOCK_NOT_NEED);
}
let curSchool = await SchoolModel.findBySclAndPos(roleId, schoolId, positionId);
if (curSchool && curSchool.isOpen) {
return resResult(STATUS.ROLE_SCHOOL_POSITION_UNLOCK_NOT_NEED);
}
const cost = parseGoodStr(SCHOOL.SCHOOL_UNLOCK_COIN);
const costResult = await handleCost(roleId, sid, cost);
if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
curSchool = await SchoolModel.updateBySclAndPos(roleId, schoolId, positionId, { isOpen: true })
return resResult(STATUS.SUCCESS, {
schoolId, positionId, hid: curSchool.hid, isOpen: curSchool.isOpen
});
}
// 激活/升级名将谱
async activeHeroScroll(msg: { hid: number }, session: BackendSession) {
let roleId = session.get('roleId');
let sid = session.get('sid');
let { hid } = msg;
let curHero = await HeroModel.findByHidAndRole(hid, roleId, 'star colorStar quality scrollActive scrollStar scrollQuality favour favourLv');
if (!curHero) return resResult(STATUS.HERO_NOT_FIND);
let dicHero = gameData.hero.get(hid);
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let { star, colorStar, quality, scrollActive, scrollStar, scrollColorStar, scrollQuality, favour, favourLv } = curHero;
let update = {
scrollActive, scrollStar, scrollColorStar, scrollQuality, favour, favourLv
};
if (!scrollActive) { // 初次激活
update.scrollActive = true;
update.scrollStar = dicHero.initialStars;
update.scrollQuality = dicHero.quality;
update.scrollColorStar = 0;
// 获取一定好感度
let friendShipLevels = gameData.friendShipLevel;
if (friendShipLevels[friendShipLevels.length - 1].level > favourLv) {
update.favour += parseInt(SCROLL.SCROLL_ACTIVE_FAVOUR);
for (let friendShipLevel of friendShipLevels) {
if (friendShipLevel.level < update.favourLv)
continue;
if (friendShipLevel.exp > update.favour)
break;
update.favour -= friendShipLevel.exp;
update.favourLv++;
}
}
} else {
if (star > scrollStar) { // 可以升星
update.scrollStar++;
} else if (scrollQuality > quality) { // 可以升品
update.scrollQuality++;
} else if (colorStar > scrollColorStar) { // 可以升彩星
update.scrollColorStar++;
} else {
return resResult(STATUS.ROLE_SCROLL_REACH_MAX);
}
}
curHero = await HeroModel.updateHeroInfo(roleId, hid, update, 'hid scrollActive scrollStar scrollColorStar scrollQuality favour favourLv');
return resResult(STATUS.SUCCESS, {
curHero
});
}
}