添加百家学宫和名将谱,未计算战力
This commit is contained in:
@@ -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
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user