marineparkclient/assets/script/Model/data/gameFun.ts
2023-08-15 11:09:12 +08:00

396 lines
18 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}