| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- -----------------------------------------------------------
- -- 防沉迷逻辑
- -----------------------------------------------------------
- local Util = require("common.Util")
- local Lang = require("common.Lang")
- local CommonDefine = require("common.CommonDefine")
- local ObjHuman = require("core.ObjHuman")
- local Broadcast = require("broadcast.Broadcast")
- local FcmDefine = require("fcm.FcmDefine")
- -- 是否在健康时间段
- HEALTH_TIME_INFO = HEALTH_TIME_INFO or nil
- local function inHealthTime()
- local nowTime = os.time()
- if not HEALTH_TIME_INFO or nowTime >= HEALTH_TIME_INFO.dayEndTime then
- local dayStartTime = Util.getDayStartTime(nowTime)
- HEALTH_TIME_INFO = {}
- HEALTH_TIME_INFO.dayEndTime = dayStartTime + 86400
- HEALTH_TIME_INFO.startTime = dayStartTime + FcmDefine.CHILD_HEALTH_START_HOUR * 3600
- HEALTH_TIME_INFO.endTime = dayStartTime + FcmDefine.CHILD_HEALTH_END_HOUR * 3600
- end
- if HEALTH_TIME_INFO.startTime <= nowTime and
- nowTime <= HEALTH_TIME_INFO.endTime then
- return true
- end
- end
- -- 检查是否通过防沉迷
- local function check(human)
- if not FcmDefine.IS_FCM_OPEN then
- return true
- end
- local fcmState = human.fcmState or FcmDefine.STATE_NOPEN
- if fcmState == FcmDefine.STATE_NOPEN then -- 默认不开
- return true
- end
- -- 如果已验证&成年
- if fcmState == FcmDefine.STATE_OK_ADULT then
- return true
- end
- -- 在不健康时间段游戏
- if not inHealthTime() then
- return false, CommonDefine.DISCONNECT_FCM_HEALTH
- end
- -- 今日在线时间
- local time = os.time() - human.db.lastLoginTime
- local onlineTimeDay = (human.db.onlineTimeDay or 0) + time
- --print("onlineTimeDay", onlineTimeDay)
- if onlineTimeDay >= FcmDefine.CHILD_DAILY_TIME then
- return false, CommonDefine.DISCONNECT_FCM_CHILD
- end
- return true
- end
- -- 防沉迷校验含踢人
- function checkFcm(human)
- if not human.db then return true end
- local isok, code = check(human)
- if not isok then
- ObjHuman.doDisconnect(human, code)
- end
- if human.fcmState then
- --print("isok, code",isok, code, human.fcmState)
- end
- return isok
- end
- -- 充值限额
- local BUY_PRICE_ONE2 = 50 -- 未满16单笔金额
- local BUY_PRICE_MONTH2 = 200 -- 未满16每月金额
- local BUY_PRICE_ONE3 = 100 -- 未满18单笔金额
- local BUY_PRICE_MONTH3 = 400 -- 未满18每月金额
- local function checkBuyPrice(human, price, dayPrice, monthPrice, age)
- if price > dayPrice then -- 单笔不能超过50元
- Broadcast.sendErr(human, Util.format(Lang.BUY_CHECK_ERR_FCM_AGE, age))
- Broadcast.sendErr(human, Util.format(Lang.BUY_CHECK_ERR_FCM_ONE, dayPrice))
- return false
- end
- local sum = human.db.topupAccountMonth or 0
- if (sum + price) > monthPrice then -- 每月不能超过200元
- Broadcast.sendErr(human, Util.format(Lang.BUY_CHECK_ERR_FCM_AGE, age))
- Broadcast.sendErr(human, Util.format(Lang.BUY_CHECK_ERR_FCM_MONTH, monthPrice))
- return false
- end
- return true
- end
- function checkCanBuy(human, price)
- if not human.db then return true end
- local fcmState = human.fcmState or FcmDefine.STATE_NOPEN
- print("checkCanBuy",price,fcmState)
- if fcmState == FcmDefine.STATE_NOPEN then -- 默认不开
- return true
- end
- -- 如果已验证&成年
- if fcmState == FcmDefine.STATE_OK_ADULT then
- return true
- end
- -- 未满8岁
- if fcmState == FcmDefine.STATE_OK_CHILD then
- Broadcast.sendErr(human, Util.format(Lang.BUY_CHECK_ERR_FCM_AGE, 8))
- Broadcast.sendErr(human, Lang.BUY_CHECK_ERR_FCM_NOCHARGE)
- return false
- end
- -- 未满16岁
- if fcmState == FcmDefine.STATE_OK_CHILD2 then
- return checkBuyPrice(human, price, BUY_PRICE_ONE2, BUY_PRICE_MONTH2, 16)
- end
- -- 未满18岁
- if fcmState == FcmDefine.STATE_OK_CHILD3 then
- return checkBuyPrice(human, price, BUY_PRICE_ONE3, BUY_PRICE_MONTH3, 18)
- end
- -- 未通过
- Broadcast.sendErr(human, Lang.BUY_CHECK_ERR_FCM)
- Broadcast.sendErr(human, Lang.BUY_CHECK_ERR_FCM_NOCHARGE)
- return false
- end
- function onTimer()
- for _, human in pairs(ObjHuman.onlineUuid) do
- if human.fd then
- checkFcm(human)
- end
- end
- end
- function CG_FMC_STATE(human, state)
- human.fcmState = state
- checkFcm(human)
- end
|