179 lines
6.9 KiB
TypeScript
179 lines
6.9 KiB
TypeScript
import { baseObj,objType,valueObj,composeObj} from "./baseObject";
|
|
import { Propbuff, PropLeaveUp, PropSale, PropUnlock} from "./propObject";
|
|
import {objCfg,expressCfg,saleCfg,levelCfg,unlockCfg,excelOutDataConfig,fileCfgType, singInCfg} from './excelDefine'
|
|
import ComputeExpression from './computed'
|
|
import gameInfo from './gameInfo'
|
|
import { hallproto } from "../../netPb/protobundle";
|
|
//import fs from "fs"
|
|
|
|
|
|
|
|
//配置表的保存和,数据对象的生成
|
|
export default class DataManager{
|
|
private static instance: any;
|
|
public static ins(): DataManager
|
|
{
|
|
this.instance = this.instance || new DataManager()
|
|
return this.instance
|
|
}
|
|
private dataConfig:excelOutDataConfig
|
|
//签到配置
|
|
private dataSignIn:Array<singInCfg>
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
private mapExpress:Map<number,ComputeExpression> = new Map<number,ComputeExpression>()
|
|
protected constructor(){
|
|
this.dataConfig={
|
|
arObj: new Array<objCfg>(),
|
|
arLv : new Array<levelCfg>(),
|
|
arUnlock: new Array<unlockCfg>(),
|
|
arSale : new Array<saleCfg>(),
|
|
express : new Array<expressCfg>()
|
|
}
|
|
}
|
|
//创建对象
|
|
private createObjById(id:number,list:Map<number,baseObj>):baseObj|undefined{
|
|
if(this.dataConfig==undefined || this.dataConfig.arObj==undefined)return
|
|
let itemCfg = this.getObjCfgById(id)
|
|
if(itemCfg==undefined)return
|
|
let obj = new baseObj()
|
|
if(itemCfg._members.length>0)//有成员
|
|
{
|
|
obj = new composeObj(itemCfg._id,itemCfg._name);
|
|
for(let idx=0;idx<itemCfg._members.length;++idx){
|
|
let membs = itemCfg._members[idx]
|
|
for(let idMemb=membs[0];idMemb<=membs[1];++idMemb)
|
|
{
|
|
let membObj = this.createObjById(idMemb,list);
|
|
if(membObj)
|
|
(obj as composeObj).addMember(idMemb,membObj);
|
|
}
|
|
}
|
|
}
|
|
else//数值类型
|
|
obj = new valueObj(itemCfg._id,itemCfg._name);
|
|
//升级属性
|
|
let cfglvData = this.getLevelCfgByIdLv(id,1)
|
|
if(cfglvData)
|
|
{
|
|
obj.addProp(new PropLeaveUp())//有升级就有buff
|
|
//buff属性
|
|
obj.addProp(new Propbuff())//有升级就有buff
|
|
}
|
|
//解锁属性
|
|
let unlockData = this.getUnlockCfgById(itemCfg._id)
|
|
if(unlockData || cfglvData)
|
|
obj.addProp(new PropUnlock())
|
|
//出售
|
|
let saleData = this.getSaleById(itemCfg._id)
|
|
if(saleData)
|
|
obj.addProp(new PropSale())
|
|
//
|
|
list.set(id,obj)
|
|
return obj
|
|
}
|
|
|
|
//设置物品配置
|
|
getObjCfgById(id:number):objCfg|undefined{
|
|
if(this.dataConfig)
|
|
{
|
|
for(let idx=0;idx<this.dataConfig.arObj.length;++idx)
|
|
{
|
|
if(this.dataConfig.arObj[idx]._id==id)
|
|
return this.dataConfig.arObj[idx]
|
|
}
|
|
}
|
|
}
|
|
getLevelCfgByIdLv(id:number,lv:number):levelCfg|undefined{
|
|
if(this.dataConfig==undefined)return undefined
|
|
let arr = this.dataConfig.arLv
|
|
for(let idx=0;idx<arr.length;++idx){
|
|
if(id>=arr[idx]._idItemRange[0]&&id<=arr[idx]._idItemRange[1] && lv >= arr[idx]._levelrange[0]&& lv <= arr[idx]._levelrange[1])
|
|
return arr[idx]
|
|
}
|
|
}
|
|
getUnlockCfgById(id:number):unlockCfg|undefined{
|
|
if(this.dataConfig==undefined)return undefined
|
|
let arr = this.dataConfig.arUnlock
|
|
for(let idx=0;idx<arr.length;++idx){
|
|
if(id>=arr[idx]._idItemRange[0]&&id<=arr[idx]._idItemRange[1])
|
|
return arr[idx]
|
|
}
|
|
}
|
|
getExpress(id:number):expressCfg|undefined{
|
|
if(this.dataConfig)
|
|
{
|
|
for(let idx=0;idx<this.dataConfig.express.length;++idx)
|
|
{
|
|
if(this.dataConfig.express[idx]._id==id)
|
|
return this.dataConfig.express[idx]
|
|
}
|
|
}
|
|
}
|
|
getComputeExpression(id:number):ComputeExpression|undefined{
|
|
return this.mapExpress.get(id)
|
|
}
|
|
//卖出售
|
|
getSaleById(id:number):saleCfg|undefined{
|
|
if(this.dataConfig==undefined)return undefined
|
|
let arr = this.dataConfig.arSale
|
|
for(let idx=0;idx<arr.length;++idx){
|
|
if(id>=arr[idx]._idItemRange[0]&&id<=arr[idx]._idItemRange[1])
|
|
return arr[idx]
|
|
}
|
|
}
|
|
//获取配置
|
|
getDataConfig(){
|
|
return this.dataConfig
|
|
}
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//初始化玩家资产
|
|
creatGameInfo(id:number){
|
|
//生成游戏对象
|
|
let gameObj = new gameInfo(id)
|
|
let arCfg = this.getObjCfgById(0)
|
|
if(arCfg)
|
|
{
|
|
for (let idx=0;idx<arCfg._members.length;++idx){
|
|
let membs = arCfg._members[idx]
|
|
for(let idMemb=membs[0];idMemb<=membs[1];++idMemb)
|
|
{
|
|
let membObj = this.createObjById(idMemb,gameObj.m_mapMeansList);
|
|
if(membObj)
|
|
gameObj.addMember(idMemb,membObj);
|
|
}
|
|
}
|
|
}
|
|
return gameObj
|
|
}
|
|
//读取配置转对象
|
|
readConfigToObj(result:string,typeFile:fileCfgType){
|
|
// let result = fs.readFileSync('./app/config/exconfig.data', 'utf8')
|
|
if (!result)
|
|
console.log("read-loadConfig-erro");
|
|
else
|
|
{
|
|
if(typeFile==fileCfgType.obj)//对象
|
|
this.dataConfig.arObj = JSON.parse(result)
|
|
else if(typeFile==fileCfgType.level)//
|
|
this.dataConfig.arLv = JSON.parse(result)
|
|
else if(typeFile==fileCfgType.unlock)//
|
|
this.dataConfig.arUnlock = JSON.parse(result)
|
|
else if(typeFile==fileCfgType.sale)//
|
|
this.dataConfig.arSale = JSON.parse(result)
|
|
else if(typeFile==fileCfgType.ruleFunc)//
|
|
{
|
|
this.dataConfig.express = JSON.parse(result)
|
|
//console.log(dataParse)
|
|
//生成表达式对象
|
|
for (let idx=0;idx<this.dataConfig.express.length;++idx) {
|
|
let valueExp = this.dataConfig.express[idx]
|
|
if(valueExp._id/300>1)
|
|
{
|
|
let cTempEx = new ComputeExpression(valueExp._desp)
|
|
this.mapExpress.set(valueExp._id,cTempEx)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |