| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- local DB = require("common.DB")
- local CommonDB = require("common.CommonDB")
- local CdkFixExcel = require("excel.cdkFix")
- local LuaMongo = _G.lua_mongo
- local Lang = require("common.Lang")
- local Code = { "0","c","e","u","m",
- "k","d","7","x","f",
- "9","j","w","6","8",
- "t","1","h","4","p",
- "y","3","2","b","5","n"}
- local batchList = {6,7,8} -- 批次位置
- local idxList = {3,4,5} -- 序号位置
- local CodeMap = {
- ["0"] = 1,["c"] = 2,["e"] = 3,["u"] = 4,["m"] = 5,
- ["k"] = 6,["d"] = 7,["7"] = 8,["x"] = 9,["f"] = 10,
- ["9"] = 11,["j"] = 12,["w"] = 13,["6"] = 14,["8"] = 15,
- ["t"] = 16,["1"] = 17,["h"] = 18,["4"] = 19,["p"] = 20,
- ["y"] = 21,["3"] = 22,["2"] = 23,["b"] = 24,["5"] = 25,["n"] = 26
- }
- local unit = 20
- local bit = unit
- local bit2 = unit * unit
- local function checkCDKParam(finishTime,cdkID)
- local now = os.time()
- if now > finishTime then
- return
- end
- return true
- end
- local function genCDKBatch(cnt,useCnt,cdkID)
- local bat = assert(CommonDB.getCDKBatch(),"assert : cdk batch not found")
- local db = {
- batch = bat + 1,
- cnt = cnt,
- useCnt = useCnt,
- info = cdkID,
- useCDKList = {},
- }
- LuaMongo.insert(DB.db_cdk, db)
- CommonDB.setCDKBatch(bat + 1) -- 将最新的cdkBatch保存
- return bat + 1
- end
- local function transNumber(num)
- local first,second = 0,0
- if num >= bit2 then
- first = math.floor(num / bit2)
- end
- if num >= bit then
- local t = num - (first * bit2)
- second = math.floor(t / bit)
- end
- local third = num - (first * bit2) - (second * bit)
- --return Code[first + 1] .. Code[second + 1] .. Code[thrid + 1]
- return first,second,third
- end
- local function calcNumber(first,second,third)
- if first > unit or second > unit or third > unit then
- return -1
- end
- return first * bit2 + second * bit + third
- end
- local function transNum2Code(num)
- local f,s,t = transNumber(num)
- return Code[f + 1]..Code[s + 1]..Code[t + 1]
- end
- local function genCDKCode(batch,index)
- return Code[math.random(2,#Code)] .. Code[math.random(#Code)] ..transNum2Code(index) .. transNum2Code(batch) .. Code[math.random(#Code)] .. Code[math.random(#Code)]
- end
- local function deCDKCode(cdk)
- local num_f_code,num_s_code,num_t_code = CodeMap[string.sub(cdk,3,3) ],CodeMap[string.sub(cdk,4,4) ],CodeMap[string.sub(cdk,5,5) ]
- if not num_f_code or not num_s_code or not num_t_code then
- return false
- end
- num_f_code = num_f_code - 1
- num_s_code = num_s_code - 1
- num_t_code = num_t_code - 1
- local bat_f_code,bat_s_code,bat_t_code = CodeMap[string.sub(cdk,6,6) ],CodeMap[string.sub(cdk,7,7) ],CodeMap[string.sub(cdk,8,8) ]
- if not bat_f_code or not bat_s_code or not bat_t_code then
- return false
- end
- bat_f_code = bat_f_code - 1
- bat_s_code = bat_s_code - 1
- bat_t_code = bat_t_code - 1
- local num = calcNumber(num_f_code,num_s_code,num_t_code)
- if num < 0 then
- return false
- end
- local batch = calcNumber(bat_f_code,bat_s_code,bat_t_code)
- if batch < 0 then
- return false
- end
- --local num = (CodeMap[string.sub(cdk,3,3) ] - 1) * 100 + (CodeMap[string.sub(cdk,4,4)] - 1) * 10 + (CodeMap[string.sub(cdk,5,5) ] - 1)
- --local batch = (CodeMap[string.sub(cdk,6,6) ] - 1) * 100 + (CodeMap[string.sub(cdk,7,7) ] - 1) * 10 + (CodeMap[string.sub(cdk,8,8) ] - 1)
- return true , num,batch
- end
- -- 生成一个批次的激活码
- -- 批次最大999 ,每次最多生成999个激活码
- --[[
- param1 = cnt 生成CDK数量
- param2 = useCnt 当前批次能够使用最大数量
- param3 = cdkId 道具信息
- ]]
- function genCDK(cnt,useCnt,cdkId)
- useCnt = useCnt or 1
- cnt = cnt < 1000 and cnt or 999
- local bat = genCDKBatch(cnt,useCnt,cdkId)
- local fileName = "cdk"..bat
- local f,err = io.open(fileName,"w")
- if not f then
- print("open file failed ",err)
- return
- end
- local idx = 0
- local data = "cdk : \n"
- while true do
- if idx > cnt then
- break
- end
- local cdk = genCDKCode(bat,idx)
- data = data .. cdk .. "\n"
- idx = idx + 1
- end
- f:write(data)
- end
- -- 使用cdk
- function useCDK(cdkBatchData,cdk)
- local ok,_,batch = deCDKCode(cdk)
- QueryCDK = { batch = { ["$eq"] = batch}}
- LuaMongo.update(DB.db_cdk,QueryCDK,{
- ["$set"] = {
- ["useCDKList"] = cdkBatchData.useCDKList
- },
- ["$unset"] = nil
- })
- end
- -- 检查CDK
- function checkCDK(cdk)
- local ok,num,batch = deCDKCode(cdk)
- if not ok then
- return Lang.CDK_INVALID_ERR
- end
- local curBatch = assert(CommonDB.getCDKBatch(),"assert : cdk batch not found")
- if curBatch < batch then
- return Lang.CDK_BATCH_ERR
- end
- QueryCDK = { batch = { ["$eq"] = batch} }
- LuaMongo.find(DB.db_cdk,QueryCDK)
- local cdkBatchData = {}
- LuaMongo.next(cdkBatchData)
- if cdkBatchData.cnt < num then
- return Lang.CDK_INVALID_ERR
- end
- if cdkBatchData.useCDKList[num] then
- return Lang.CDK_ERR4
- end
- return nil, cdkBatchData
- end
|