396 lines
18 KiB
TypeScript
396 lines
18 KiB
TypeScript
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 = <funcExpression>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;idx<endId;++idx)
|
||
{
|
||
let objItem = game.findMeans(idx)//企鹅
|
||
if(objItem && (objItem as valueObj).getCount()>0)
|
||
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 = <funcExpression>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()<num)
|
||
valueO.setCount(0)
|
||
else
|
||
valueO.changeCount(-num)
|
||
if(id==IDDef.COIN)
|
||
EventCenter.emit(MSG_Event.OperChangeCoin,-num)
|
||
}
|
||
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 || objItem.getObjType()!=objType.value || num<0)return;
|
||
let valueO = objItem as valueObj
|
||
valueO.changeCount(num)
|
||
if(id==IDDef.COIN)
|
||
EventCenter.emit(MSG_Event.OperChangeCoin,num)
|
||
}
|
||
break;
|
||
case funcExpression.addCatchObjId://增加可捕获对象
|
||
{
|
||
let objItem = game.findMeans(operId)//道具
|
||
if(!objItem)return;
|
||
let catchProp = objItem.getPropByType(propType.catch)
|
||
if(!catchProp)
|
||
{
|
||
objItem.addProp(new PropCatch())
|
||
catchProp = objItem.getPropByType(propType.catch)
|
||
}
|
||
for (let idx=0;idx<jsonData._param.length;++idx)
|
||
{
|
||
(catchProp as PropCatch).addAbleId(jsonData._param[idx] as number)
|
||
}
|
||
}
|
||
break
|
||
}
|
||
}
|
||
//表达式解析描述
|
||
doDespDecode(game:gameInfo,jsonData:excelJson,operId:number):[number,string]{
|
||
let idFun = <funcExpression>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;idx<jsonData._param.length;++idx)
|
||
{
|
||
let objItem = game.findMeans(jsonData._param[idx] as number)//对象
|
||
if(objItem)
|
||
{
|
||
objName += objItem.getName()
|
||
if(idx+1<jsonData._param.length)
|
||
objName += ","
|
||
}
|
||
}
|
||
let desp = expressCfgCur._desp
|
||
let despResult = desp.replace(/x/gi,objName)
|
||
return [0,despResult]
|
||
}
|
||
break
|
||
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 [operId,""];
|
||
|
||
let desp = expressCfgCur._desp
|
||
let despResult = desp.replace(/x/gi,String(num))
|
||
return [0,despResult]
|
||
}
|
||
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 [operId,""];
|
||
|
||
let desp = expressCfgCur._desp
|
||
let despResult = desp.replace(/x/gi,String(Math.floor(num*100)))
|
||
return [0,despResult]
|
||
}
|
||
break;
|
||
}
|
||
return [0,""];
|
||
}
|
||
|
||
//表达式Buff解析
|
||
doBuffDecode(game:gameInfo,jsonData:excelJson,operId:number):buffCfg{
|
||
let idFun = <funcExpression>jsonData._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 = <funcExpression>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;
|
||
}
|
||
} |