202 lines
6.1 KiB
TypeScript
202 lines
6.1 KiB
TypeScript
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;//补签
|
||
}
|
||
}
|
||
} |