import { EErrorCode } from '../Config/_error_'; import { GExtUserSer } from './ExtUserService'; import { GLog,Config } from 'cgserver'; import { GMongoCacheSer, MongoCacheModel } from 'cgserver'; /** * 任务相关的统计数据 */ export class TaskModel { fish_num:number=0 slot_num:number=0 charge:number=0 game_time:number=0//分钟 share_wechat_friend:number=0 share_wechat_group:number=0 } /** * 任务枚举类型 */ export enum ETaskType { /** * 捕获鱼的数量 */ FishNum = 1, /** * 水果连连看的玩法数量 */ SlotNum, /** * 充值情况 */ Charge, /** * 游戏时长 */ GameTime, /** * 分享好友 */ ShareWeChatFriend, /** * 分享朋友圈 */ ShareWeChatGroup } /** * 任务系统,目前只支持每日任务 */ export let GTaskSer:TaskService=null class TaskService extends Config { task= [ {id:1,name:"轻松充值",des:"当日充值任意金额",type:3,num:-1,day_max:1,prize:{liveness:20}}, {id:2,name:"菜鸟捕鱼",des:"当日累计捕获500条鱼",type:1,num:300,day_max:1,prize:{liveness:20}}, {id:3,name:"菜鸟连连看",des:"当日旋转400次水果机",type:2,num:400,day_max:1,prize:{liveness:20}}, {id:4,name:"分享好友",des:"分享给微信群组",type:5,num:1,day_max:1,prize:{liveness:10}}, {id:5,name:"我是土豪",des:"当日充值累计达到200",type:3,num:200,day_max:1,prize:{liveness:40}}, {id:6,name:"我爱捕鱼",des:"当日累计捕获1000条鱼",type:1,num:700,day_max:1,prize:{liveness:25}}, {id:7,name:"高手连连看",des:"当日旋转1000次水果机",type:2,num:1000,day_max:1,prize:{liveness:30}}, {id:8,name:"分享圈子",des:"分享到朋友圈",type:6,num:1,day_max:1,prize:{liveness:20}}, {id:9,name:"达人捕鱼",des:"当日累计捕获2000条鱼",type:1,num:2000,day_max:1,prize:{liveness:30}}, {id:10,name:"大神连连看",des:"当日旋转1000次水果机",type:2,num:2000,day_max:1,prize:{liveness:40}}, //{id:11,name:"持之以恒",des:"当日游戏时长达到90分钟",type:4,num:90,day_max:1,prize:{liveness:20}} ] task_box= { "20":{coin:1000}, "40":{coin:2000}, "80":{coin:4000,ball:3}, "120":{coin:5000,ball:6}, "160":{coin:6000,ball:9}, "200":{coin:10000,ball:12} } constructor() { super("TaskConfig") } /** * 根据角色id号获取角色任务信息 * @param user_id 角色id */ async getByUserId(user_id) { let tm = await GMongoCacheSer.getData("table_task_"+user_id) if(!tm) { tm = new TaskModel() } return tm } /** * 用户行为,触发任务系统数据变化 * @param task_type 可能触发的任务类型 * @param value 相应的变化数值 */ async onUserAction(user_id,task_type:ETaskType,dtvalue:number) { let tm = await this.getByUserId(user_id) if(!tm) { tm = new TaskModel() } switch(task_type) { case ETaskType.FishNum: { tm.fish_num+=dtvalue break } case ETaskType.SlotNum: { tm.slot_num+=dtvalue break } case ETaskType.Charge: { tm.charge+=dtvalue break } case ETaskType.GameTime: { tm.game_time+=dtvalue break } case ETaskType.ShareWeChatFriend: { tm.share_wechat_friend+=dtvalue break } case ETaskType.ShareWeChatGroup: { tm.share_wechat_group+=dtvalue break } default: break } let key = "table_task_"+user_id let cm = new MongoCacheModel() cm.key=key cm.data=tm let date = new Date() let cur_seconds = date.getHours()*60*60+date.getMinutes()*60+date.getSeconds() let left = 24*60*60-cur_seconds cm.expireAt=left*1000 GMongoCacheSer.updateOne(cm,{key:key}) } /** * 领取任务宝箱奖励 * @param user_id * @param liveness */ async getBoxPrize(user_id,liveness) { let rs={prize:null,errcode:null} let prize = this.task_box[liveness] if(!prize) { rs.errcode = EErrorCode.Wrong_Param return rs } let tm = await this.getByUserId(user_id) if(!tm) { rs.errcode = EErrorCode.Wrong_Param return rs } if(tm[liveness]) { rs.errcode = EErrorCode.Wrong_Param return rs } let ln = await this._getLiveness(tm) if(ln