HJ_Server/src/public/sign.ts
DESKTOP-15R5JU0\legu 97e070ea81 init
2023-11-17 12:02:12 +08:00

114 lines
3.1 KiB
TypeScript

import { ApiCall } from 'tsrpc';
import { hongdianVal } from '../shared/protocols/hongdian/PtlGet';
import { ctype } from '../shared/protocols/sign/type';
import { PublicShared } from '../shared/public/public';
import { PlayerFun } from './player';
export class SignFun {
/**获取配置信息 */
static async getCon() {
let _con = G.gc.qiandao
return _con
}
/**获取宝箱配置 */
static async getBoxCon() {
let _con = G.gc.qiandaocom
return _con
}
/**初始数据 */
static async initData() {
let _nt = G.time
let _r = {
refreshtime: _nt,
gotarr: [],
login: 1,
logintime: _nt,
boxgotarr: []
}
return _r
}
/**获取签到信息 */
static async getInfo(uid: string, where: { ctype: string }) {
let info: {} = await PlayerFun.getAttrOne(uid, where)
const _con = await this.getCon()
let _isSet = 0
let _nt = G.time
if (!info) {
info = await this.initData()
info["key"] = "1"
_isSet = 1
}
// 是否到下月
let _diff = PublicShared.getDiff(info["refreshtime"])
if (_diff > Object.keys(_con[info["key"]]).length) {
Object.assign(info, await this.initData())
info["key"] = await this.getNewMonth(info)
_isSet = 1
}
// 设置数据
if (_isSet == 1) {
this.setInfo(uid, info)
}
return info
}
/**更换月份key */
static async getNewMonth(info) {
const _con = await this.getCon()
let _keys = Object.keys(_con)
let _idx = _keys.indexOf(info.key)
let _res: string
if (_idx + 1 >= _keys.length) {
_res = _keys[0]
} else {
_res = _keys[_idx + 1]
}
return _res
}
/**更新登录信息 按照实际登录来算*/
static async updateLogin(uid: string) {
let _info = await this.getInfo(uid, { ctype: ctype })
if (!PublicShared.chkSameDate(_info["logintime"], G.time)) {
_info["login"] += 1
_info["logintime"] = G.time
this.setInfo(uid, _info)
}
}
/**设置数据 */
static async setInfo(uid: string, data: {}) {
PlayerFun.setAttr(uid, { ctype: ctype }, data)
}
/**红点 */
static async getHongDian(call: ApiCall) {
let _res: hongdianVal = {
show: false
}
let [isOpen, tips] = PublicShared.getOpenCond(call, "zc_img6")
if (!isOpen) return _res;
let info = await this.getInfo(call.uid, { ctype: ctype })
// 登录奖励
if (info["login"] > info["gotarr"].length) {
_res.show = true
return _res
}
// 宝箱奖励
const _boxCon = await this.getBoxCon()
for (let i in _boxCon) {
if (parseInt(i) <= info["login"] && info["boxgotarr"].indexOf(i) == -1) {
_res.show = true
return _res
}
}
return _res
}
}