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

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

@@ -90,6 +90,7 @@ export const FILENAME = {
DIC_SUIT: 'dic_zyz_suit',
DIC_TITLE: 'dic_zyz_title',
DIC_TERAPH: 'dic_zyz_teraph',
DIC_SCHOOL: 'dic_zyz_school'
}
export const WAR_RELATE_TABLES = [

View File

@@ -173,6 +173,11 @@ export const STATUS = {
ROLE_TERAPH_NOT_STRENGTHEN: {code: 30501, simStr: '玩家神像不能强化'},
ROLE_TERAPH_NOT_QUILITY: {code: 30502, simStr: '玩家神像不能进阶'},
ROLE_SCHOOL_HERO_USED: {code: 30600, simStr: '该武将已配置'},
ROLE_SCHOOL_POSITION_LOCKED: {code: 30601, simStr: '该位置未解锁'},
ROLE_SCHOOL_POSITION_UNLOCK_NOT_NEED: {code: 30602, simStr: '该位置已解锁'},
ROLE_SCROLL_REACH_MAX: {code: 30603, simStr: '已经升到可以升的最高等级'},
// 社交相关状态 40000 - 49999
// 运营模块相关状态 50000 - 59999
// GM后台相关状态 60000 - 69999

View File

@@ -66,6 +66,10 @@ interface heroUpdate {
connections?: Connect[];
ePlace?:EPlace[];
_id?:number;
scrollActive?: boolean;
scrollStar?: number;
scrollColorStar?: number;
scrollQuality?: number;
}
@index({ roleId: 1, hid: 1 })
@@ -109,6 +113,15 @@ export default class Hero extends BaseModel {
@prop({ required: true, default: 0 })
quality: number; // 品质
@prop({ required: true, default: false })
scrollActive: boolean; // 是否在名将谱中激活
@prop({ required: true, default: 0 })
scrollStar: number; // 名将谱中保存的星级
@prop({ required: true, default: 0 })
scrollColorStar: number; // 名将谱中保存的觉醒等级
@prop({ required: true, default: 0 })
scrollQuality: number; // 名将谱中保存的品质
@prop({ required: true, default: 0 })
job: number; // 职业
@prop({ required: true, default: 0 })
@@ -139,8 +152,8 @@ export default class Hero extends BaseModel {
const hero: HeroType = await HeroModel.findOne({ seqId, roleId }).lean(lean);
return hero;
}
public static async findByHidAndRole(hid: number, roleId: string, lean = true) {
const hero: HeroType = await HeroModel.findOne({ hid, roleId }).lean(lean);
public static async findByHidAndRole(hid: number, roleId: string, select?: string, lean = true) {
const hero: HeroType = await HeroModel.findOne({ hid, roleId }).select(select).lean(lean);
return hero;
}
@@ -204,9 +217,9 @@ export default class Hero extends BaseModel {
return result;
}
public static async updateHeroInfo(roleId: string, hid:number, heroUpdate:heroUpdate, lean = true) {
public static async updateHeroInfo(roleId: string, hid:number, heroUpdate:heroUpdate, select?: string, lean = true) {
delete heroUpdate._id;
let result: HeroType = await HeroModel.findOneAndUpdate({roleId, hid}, {$set:heroUpdate}).lean(lean);
let result: HeroType = await HeroModel.findOneAndUpdate({roleId, hid}, {$set:heroUpdate}, {new: true}).select(select).lean(lean);
return result;
}

59
shared/db/School.ts Normal file
View File

@@ -0,0 +1,59 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
/**
* 百家学宫表
*/
@index({ roleId: 1 })
@index({ roleId: 1, schoolId: 1, positionId: 1 })
export default class School extends BaseModel {
@prop({ required: true })
roleId: string; // 角色 id
@prop({ required: true })
schoolId: number; // 学院id
@prop({ required: true })
positionId: number; // 位置id
@prop({ required: true, default: 0 })
hid: number; // 放置的武将
@prop({ required: true, default: false })
isOpen: boolean; // 位置是否开启
public static async findByRoleId(roleId: string) {
let result: SchoolType[] = await SchoolModel.find({ roleId }).lean();
return result;
}
public static async findBySclAndPos(roleId: string, schoolId: number, positionId: number) {
let result: SchoolType = await SchoolModel.findOne({ roleId, schoolId, positionId }).lean();
return result;
}
public static async findByHid(roleId: string, hid: number) {
let result: SchoolType = await SchoolModel.findOne({ roleId, hid }).lean();
return result;
}
public static async updateBySclAndPos(roleId: string, schoolId: number, positionId: number, update: {hid?: number, isOpen?: boolean}) {
const doc = new SchoolModel();
const setOnInsert = doc.toJSON();
for(let key in update) delete setOnInsert[key];
delete setOnInsert._id;
const result: SchoolType = await SchoolModel.findOneAndUpdate({ roleId, schoolId, positionId }, { $setOnInsert: setOnInsert, $set: update }, { new: true, upsert: true }).lean();
return result;
}
public static async deleteAccount(roleId: string) {
let result = await SchoolModel.deleteMany({ roleId });
return result;
}
}
export const SchoolModel = getModelForClass(School);
export interface SchoolType extends Pick<DocumentType<School>, keyof School> { };

View File

@@ -32,6 +32,8 @@ import { dicHeroEquip } from './dictionary/DicHeroEquip';
import { dicSuit } from './dictionary/DicSuit';
import { dicTitle } from './dictionary/DicTitle';
import { dicTeraph } from './dictionary/DicTeraph';
import { dicSchool } from './dictionary/DicSchool';
export const gameData = {
blurprtCompose: dicBlueprtCompose,
blueprtPossibility: dicBlueprtPossibility,
@@ -74,7 +76,8 @@ export const gameData = {
dicHeroEquip: dicHeroEquip,
suit: dicSuit,
title: dicTitle,
teraphs: dicTeraph
teraphs: dicTeraph,
school: dicSchool
};
// 在此提供一些原先在gamedata中提供的方法以便更方便获取gameData数据
@@ -210,4 +213,4 @@ export function getTitle(titleLv: number) {
export function getTeraph(id: number, grade: number) {
const teraphInfo = gameData.teraphs.get(id +'_'+ grade);
return teraphInfo;
}
}

View File

@@ -2,12 +2,28 @@ export const EQUIP = {
EQUIP_ONE_HOLE: '17038&1', // 装备孔1号位消耗
EQUIP_TWO_HOLE: '17038&2', // 装备孔2号位消耗
EQUIP_THREE_HOLE: '17038&4', // 装备孔3号位消耗
EQUIP_ONE_REFORGED: '17040&1', // 装备位洗练词条第一次消耗
EQUIP_TWO_REFORGED: '17040&2', // 装备位洗练词条第二次消耗
EQUIP_THREE_REFORGED: '17040&4', // 装备位洗练词条第三次消耗
EQUIP_FOUR_REFORGED: '17040&8', // 装备位洗练词条第四次消耗
EQUIP_ONE_LOCKED: '17041&1', // 装备位洗练词条不锁住钥匙消耗
EQUIP_TWO_LOCKED: '17041&2', // 装备位洗练词条锁住一条钥匙消耗
EQUIP_THREE_LOCKED: '17041&4', // 装备位洗练词条锁住二条钥匙消耗
EQUIP_FOUR_LOCKED: '17041&8', // 装备位洗练词条锁住三条钥匙消耗
EQUIP_ONE_REFORGED: '17040&1', // 装备位洗练四条词条消耗
EQUIP_TWO_REFORGED: '17040&2', // 装备位洗练三条词条消耗
EQUIP_THREE_REFORGED: '17040&4', // 装备位洗练二条词条消耗
EQUIP_FOUR_REFORGED: '17040&8', // 装备位洗练一条词条消耗
EQUIP_ONE_LOCKED: '17041&1', // 装备锁定第一条词条锁消耗
EQUIP_TWO_LOCKED: '17041&2', // 装备锁定第二条词条锁消耗
EQUIP_THREE_LOCKED: '17041&4', // 装备锁定第三条词条锁消耗
};
export const JOB = {
JOB_CLASS_1: '步兵', // 大兵种名称
JOB_CLASS_2: '枪兵', // 大兵种名称
JOB_CLASS_3: '骑兵', // 大兵种名称
JOB_CLASS_4: '弓兵', // 大兵种名称
JOB_CLASS_5: '游侠', // 大兵种名称
JOB_CLASS_6: '策士', // 大兵种名称
JOB_CLASS_7: '道士', // 大兵种名称
JOB_CLASS_8: '医者', // 大兵种名称
};
export const SCHOOL = {
SCHOOL_POSITION: '1&1|2&1|3&1|4&0|5&0', // 百家学宫位置锁定
SCHOOL_UNLOCK_COIN: '31001&100', // 百家学宫解锁位置消耗
};
export const SCROLL = {
SCROLL_ACTIVE_FAVOUR: '50', // 首次激活增加的好感度
};

View File

@@ -0,0 +1,26 @@
// 百家学宫列表
import { readJsonFile, parseNumberList } from '../util'
import { FILENAME } from '../../consts'
export interface DicSchool {
// 学宫id
readonly id: number;
// 学宫名
readonly name: string;
// 提升属性
readonly upAttribute: Array<number>;
}
const str = readJsonFile(FILENAME.DIC_SCHOOL);
let arr = JSON.parse(str);
export const dicSchool = new Map<number, DicSchool>();
arr.forEach(o => {
o.upAttribute = parseNumberList(o.upAttribute)
dicSchool.set(o.id, o);
});
arr = undefined;

View File

@@ -41,3 +41,16 @@ export interface EquipInter {
export interface BagInter {id: number, itemName: string, count: number, type: number, hid:number, times?: number};
export interface ItemInter {id?: number, count?: number, seqId?: number, type?: number};
// 百家学宫,布阵武将位置
export interface SclPosInter {
id: number;
hid: number;
isOpen: boolean;
}
// 百家学宫返回
export interface SclResultInter {
id: number;
position: SclPosInter[]
}

View File

@@ -14,7 +14,7 @@ export async function addSkins(roleId: string, id: number) {
let skinInfo = gameData.fashion.get(id);
if (!skinInfo)
return false;
let hero = await HeroModel.findByHidAndRole(skinInfo.actorId, roleId, false);
let hero = await HeroModel.findByHidAndRole(skinInfo.actorId, roleId);
if (!hero)
return false;
if (!!_.findWhere(hero.skins, { id }))