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

202 lines
6.1 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 {excelJson,saleCfg,levelCfg,unlockCfg,objCfg,buffCfg,buffType} from './excelDefine'
import {propBase} from './baseObject'
import { hallproto } from '../../netPb/protobundle';
//数值表
export interface meansData{
id:number, //id
level:number;//成长等级
number:number;// 数量默认1
}
export interface buffIF{
eType:buffType
num:number
}
//对象动作接口
export interface decodeExcelJson{
doConditionDecode(exData:excelJson):boolean, //判断exJson是否满足条件
doDespDecode(exData:excelJson):string, //获取exJson对应的文字描述
doBuffDecode(exData:excelJson):buffCfg, //获取exJson解析为buffCfg
doExpressDecode(exData:excelJson):buffCfg, //获取exJson返回表达式值
}
//游戏对象功能性属性
export enum propType{
//基础类型给出0x0F的空间
level = 1, //升级对象
unlock = 2, //解锁属性
buff = 3, //buff属性
sale = 4, //出售属性
catch = 5, //捕获属性
signIn = 6, //签到
}
//buff属性
export class Propbuff extends propBase{
protected buff:buffIF={eType:0,num:0}//buff值
constructor(){
super(propType.buff)
}
//设置buff
setBuff(tp:buffType,num:number)
{
this.buff.eType = tp;
this.buff.num = num;
}
getBuff(){return this.buff}
}
//解锁
export class PropUnlock extends propBase{
protected bUnLocked:boolean = false;//是否解锁
protected fee:number = 0//解锁花费
constructor(){
super(propType.unlock)
}
//设置,获取解锁
setUnLock(bl:boolean){this.bUnLocked=bl}
getUnLock(){return this.bUnLocked}
//解锁花费
setFee(fe:number){this.fee = fe}
getFee(){return this.fee}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//升级对象
export class PropLeaveUp extends propBase{
constructor(){
super(propType.level)
}
protected level:number = 0;//成长等级
//设置等级
setLevel(lv:number){this.level = lv}
//改变等级
changeLevel(lv:number){this.level += lv}
getLevel(){return this.level}
}
//出售价值
export class PropSale extends propBase{
constructor(){
super(propType.sale)
}
protected price:number = 0;//价值
//设置等级
setPrice(price:number){this.price = price}
getPrice(){return this.price}
}
//捕获对象
export class PropCatch extends propBase{
constructor(){
super(propType.catch)
}
protected vecIdAble:Array<number> = Array<number>();//捕鱼库
//设置等级
addAbleId(id:number)
{
for(let idx=0;idx<this.vecIdAble.length;++idx)
{
if(this.vecIdAble[idx]==id)
return
}
this.vecIdAble.push(id)
}
getAble(){return this.vecIdAble}
}
//签到属性
export interface IPSignIn{
weekDay :number, //星期1-7
isToday :boolean, //是否当天
ymd :string, //年月日
eSigin :number, //签到类型,0不可签到1已签到2已补签3可签到,4可补签
rewardType :number, //奖励类型
rewardValue :number, //奖励值
desp :string, //奖励描述
}
export class PropSignIn extends propBase{
protected vecSignInData = []
protected weekOneTm = -1; //星期一的时间搓
protected todeyWeekIdx = 7; //当日星期x
constructor(){
super(propType.signIn)
}
//获取签到信息
getSignInfo(wDay:number){
return this.vecSignInData[wDay] as IPSignIn
}
//获取周一时间
getWeekOneTime(){
return this.weekOneTm;
}
//重置签到信息
reset(year:number,month:number,day:number){
let dt = new Date(year,month,day)
let curWeekDay = (dt.getDay()-1+7)%7+1//当前星期x
let curShijiancuo = dt.getTime()
for(let idx=1;idx<=7;++idx){
let dtWeek = new Date()
dtWeek.setTime(curShijiancuo-(curWeekDay-idx)*24*3600*1000)//星期x的毫秒数
let dtSI:IPSignIn={
weekDay : idx,
isToday : curWeekDay==idx?true:false,
ymd : dtWeek.getFullYear()+"年"+(dtWeek.getMonth()+1)+"月"+dtWeek.getDate()+"日",
eSigin : 0,
rewardType :0,
rewardValue :0,
desp:""
}
if (dtSI.isToday)//当天星期x
this.todeyWeekIdx = idx;
if (idx<this.todeyWeekIdx)
dtSI.eSigin = 4
else if(idx==this.todeyWeekIdx)
dtSI.eSigin = 3
this.vecSignInData[idx] = dtSI
if(idx==1)//星期一
this.weekOneTm = dtWeek.getTime()
}
}
//设置奖励值
setReward(weekDay:number,eType:number,nValue:number,desp:string){
this.vecSignInData[weekDay].rewardType=eType
this.vecSignInData[weekDay].rewardValue = nValue;
this.vecSignInData[weekDay].desp = desp;
}
//设置签到值
setSignInInfo(weekOneTm:number,signinfo:hallproto.SingInData.IsingIn[]|null){
if(this.weekOneTm == weekOneTm && signinfo)//同一周时间
{
for(let idx=0;idx<signinfo.length;++idx){
let info = signinfo[idx]
this.vecSignInData[info.weekDay].eSigin = info.sInType;
}
}
}
isSignAble(wDay:number){
let sInData = this.vecSignInData[wDay] as IPSignIn
return (sInData.eSigin==3||sInData.eSigin==4)?true:false;
}
//签到
doSign(wDay:number){
if(this.isSignAble(wDay)==true){
let sInData = this.vecSignInData[wDay] as IPSignIn
if(sInData.isToday==true)//当天
sInData.eSigin = 1;//当天签
else
sInData.eSigin = 2;//补签
}
}
}