import gameInfo from './gameInfo' import {excelJson, funcExpression,buffType,buffCfg, IDDef} from './excelDefine' import dataManager from './DataManager' import {composeObj, objType,valueObj} from './baseObject' import {Propbuff, PropCatch, PropLeaveUp, propType, PropUnlock} from './propObject' import { EventCenter } from '../../../common/ui/uiEv/EventCenter' import { MSG_Event } from '../../DefineMsg/LogicMsg' export default class gameFun{ //解锁、升级条件,operId操作对象id doConditionDecode(game:gameInfo,jsonData:excelJson,operId:number):boolean{ let idFun = jsonData._idFun;//解锁条件id switch(idFun){ case funcExpression.itemNum://道具数量大于多少 { let id = Number(jsonData._param[0]) if(id==0)id = operId;//自己 let objItem = game.findMeans(id)//道具 if(!objItem || objItem.getObjType()!=objType.value)return false; let num = 0//只有一个参数 if (jsonData._param[1] instanceof Object)//excelJson,表达式 num = this.doExpressDecode(game,jsonData._param[1],operId) as number else num = jsonData._param[1] if((objItem as valueObj).getCount()>=num) return true; else return false; } break; case funcExpression.ifunlockitem://解锁了道具 { let id = Number(jsonData._param[0]) let objItem = game.findMeans(id)//解锁道具 if(!objItem)return false; return true; } break; case funcExpression.uplevelitem://升级道具 { let id = 0; if (jsonData._param[0] instanceof Object)//excelJson,表达式 id = this.doExpressDecode(game,jsonData._param[0],operId) as number else id = Number(jsonData._param[0]) let lv = 0//只有两个参数 if (jsonData._param[1] instanceof Object)//excelJson,表达式 lv = this.doExpressDecode(game,jsonData._param[1],operId) as number else lv = jsonData._param[1] let objItem = game.findMeans(id)//升级道具 if(!objItem || !objItem.getPropByType(propType.level))return false; let lvObj = objItem.getPropByType(propType.level) if((lvObj as PropLeaveUp).getLevel()>=lv)//升级等级 return true; else return false; } break; case funcExpression.hasOneQiE://钓到了企鹅 { let beginId = jsonData._param[0] as number let endId = jsonData._param[1] as number for (let idx=beginId;idx0) return true return false } } break; case funcExpression.hasOneMember://钓到x中任意子对象 { let xObjId = jsonData._param[0] as number let objItem = game.findMeans(xObjId)//道具 if(!objItem || objItem.getObjType()!=objType.compose)return false let mapChildrens = (objItem as composeObj).getMemberMap() for (let [id,obj] of mapChildrens){ if((obj as valueObj).getCount()>0) return true } return false } break; } return false; } //操作 doOperDecode(game:gameInfo,jsonData:excelJson,operId:number){ let idFun = jsonData._idFun;//解锁条件id switch(idFun){ case funcExpression.delMeansNum://扣除道具数量 { let id = Number(jsonData._param[0]) let num = 0 if (jsonData._param[1] instanceof Object)//excelJson,表达式 num = this.doExpressDecode(game,jsonData._param[1],operId) as number else num = jsonData._param[1] let objItem = game.findMeans(id)//道具 if(!objItem || objItem.getObjType()!=objType.value)return; let valueO = objItem as valueObj if(valueO.getCount()jsonData._idFun;//解锁条件id let expressCfgCur = dataManager.ins().getExpress(idFun) if(expressCfgCur==undefined)return [0,""]; switch(idFun){ case funcExpression.itemNum://道具数量大于多少 { let id = Number(jsonData._param[0]) let objItem = game.findMeans(id)//道具 if(!objItem)return [id,""]; let num = 0 if (jsonData._param[1] instanceof Object)//excelJson,表达式 num = this.doExpressDecode(game,jsonData._param[1],operId) as number else num = jsonData._param[1] let desp = expressCfgCur._desp desp = desp.replace(/x/gi,objItem.getName()) let despResult = desp.replace(/y/gi,String(num)) return [id,despResult] } break; case funcExpression.ifunlockitem://解锁了道具 { let id = Number(jsonData._param[0]) let objItem = game.findMeans(id)//解锁道具 if(!objItem)return [id,""]; let desp = expressCfgCur._desp let despResult = desp.replace(/x/gi,objItem.getName()) return [id,despResult] } break; case funcExpression.hasOneQiE://钓到了企鹅 { return [0,expressCfgCur._desp] } break; case funcExpression.hasOneMember://钓到x中任意子对象 { let xObjId = jsonData._param[0] as number let objItem = game.findMeans(xObjId)//解锁道具 if(objItem) { let desp = expressCfgCur._desp let despResult = desp.replace(/x/gi,objItem.getName()) return [0,despResult] } } break; case funcExpression.uplevelitem://升级道具 { let id = 0; if (jsonData._param[0] instanceof Object)//excelJson,表达式 id = this.doExpressDecode(game,jsonData._param[0],operId) as number else id = Number(jsonData._param[0]) let lv = 0 if (jsonData._param[1] instanceof Object)//excelJson,表达式 lv = this.doExpressDecode(game,jsonData._param[1],operId) as number else lv = jsonData._param[1] let objItem = game.findMeans(id)//升级道具 if(!objItem)return [id,""]; let desp = expressCfgCur._desp let despResult = desp.replace(/x/gi,objItem.getName()) despResult = despResult.replace(/y/gi,String(lv)) return [id,despResult] } break; case funcExpression.delMeansNum://扣除道具数量 { let id = Number(jsonData._param[0]) let num = 0 if (jsonData._param[1] instanceof Object)//excelJson,表达式 num = this.doExpressDecode(game,jsonData._param[1],operId) as number else num = jsonData._param[1] let objItem = game.findMeans(id)//道具 if(!objItem)return [id,""]; let desp = expressCfgCur._desp let despResult = desp.replace(/x/gi,objItem.getName()) despResult = despResult.replace(/y/gi,String(num)) return [id,despResult] } break; case funcExpression.addMeansNum://添加道具数量 { let id = Number(jsonData._param[0]) let num = 0 if (jsonData._param[1] instanceof Object)//excelJson,表达式 num = this.doExpressDecode(game,jsonData._param[1],operId) as number else num = jsonData._param[1] let objItem = game.findMeans(id)//道具 if(!objItem)return [id,""]; let desp = expressCfgCur._desp let despResult = desp.replace(/x/gi,objItem.getName()) despResult = despResult.replace(/y/gi,String(num)) return [id,despResult] } break; case funcExpression.addCatchObjId://增加可捕获对象 { let objItem = game.findMeans(operId)//道具 if(!objItem)return [0,""]; let catchProp = objItem.getPropByType(propType.catch) if(!catchProp) { objItem.addProp(new PropCatch()) catchProp = objItem.getPropByType(propType.catch) } let objName = "" for (let idx=0;idxjsonData._idFun;//解锁条件id let expressCfgCur = dataManager.ins().getExpress(idFun) let data:buffCfg ={ _id:operId, _eType:buffType.none, _num:0, } if(expressCfgCur==undefined)return data; switch(idFun){ case funcExpression.addBuffCoinNum://buff增加 { let num = 0 if (jsonData._param[0] instanceof Object)//excelJson,表达式 num = this.doExpressDecode(game,jsonData._param[0],operId) as number else num = jsonData._param[0] let objItem = game.findMeans(operId)//道具 if(!objItem)return data; data._eType =buffType.base, data._num = num return data } break; case funcExpression.addBuffCoinPer://buff增加百分比 { let num = 0 if (jsonData._param[0] instanceof Object)//excelJson,表达式 num = this.doExpressDecode(game,jsonData._param[0],operId) as number else num = jsonData._param[0] let objItem = game.findMeans(operId)//道具 if(!objItem)return data; data._eType =buffType.ratio, data._num = num return data } break; } return data } //表达式解析 doExpressDecode(game:gameInfo,jsonData:excelJson,operId:number):number{ let idFun = jsonData._idFun;//解锁条件id let expressCfgCur = dataManager.ins().getExpress(idFun) if(expressCfgCur==undefined)return 0; if(idFun>=funcExpression.linearExpression) { let objItem = game.getMemberLookDown(operId)//道具 if(objItem==undefined)return 0; let expressId = jsonData._idFun as number let cmpExpression = dataManager.ins().getComputeExpression(expressId) if(cmpExpression) { let NLv = 0//(objItem[1] as levelObj).getLevel()//等级 let MIdx = objItem[0]//序号 let PUnLockvalue = 0//解锁初始值 let ICurId = operId //当前id let proLv = objItem[1].getPropByType(propType.level) let proUnLock = objItem[1].getPropByType(propType.unlock) if(proLv) NLv = (proLv as PropLeaveUp).getLevel() if(proUnLock)//解锁费用 PUnLockvalue = (proUnLock as PropUnlock).getFee() //m,n,p表达(序号,等级,解锁值) let resp = cmpExpression.getResualtByParam(MIdx,NLv,PUnLockvalue,ICurId) if(idFun == funcExpression.ExpUnlockCoin)//解锁金币,有取整 { if(resp<1000&&resp>100) resp = Math.floor(resp/10)*10 else if(resp>1000) resp = Math.floor(resp/100)*100 } return resp } } return 0; } }