--[[ author:{zlf} time:2020-07-30 19:26:53 zandao: CDPK3-037 note: web充值用来查询玩家数据 ]] local skynet = require "skynet" require "skynet.manager" local logger = require "logger" local queue = require "skynet.queue" local cjson = require "cjson" local stringify = require "stringify" local pipeline = require "pipeline" local loader = require "model.loader" local elf = require "model.elf" local equipment = require "model.equipment" local redisdriver = require "skynet.db.redis" local asset = require "model.asset" local md5 = require "md5" local namecenter local usercenter local synchronized = queue() local skynet_send = skynet.send local skynet_call = skynet.call local status = 0 local pay_id_init = 0 local db_character local FUND = 2 --基金 local MONTH = 3 --月卡 local LIFELONG = 4--终身卡 local QUARTER = 5 --季卡 local WEEK = 6 --周卡 local SUPER_FUND = 8 --超级基金 -- PK3-1394 超级成长基金 local authz = { acc="yytx", pwd="lee@YY-Games.520" } local pay_id = { } -- Generate request data local content = { acc = authz.acc, pwd = authz.pwd, sign = false } content.sign = string.sub(md5.sumhexa(content.acc .. content.pwd),9,24) local whitelist = { } local function init_payid() local cfg = assert(asset.recharge_proto) for key, value in pairs(cfg) do if value.type == FUND then--基金 pay_id.fund = tonumber(key) elseif value.type == MONTH then --开启月卡 pay_id.month_card = tonumber(key) elseif value.type == LIFELONG then--开启终身卡 pay_id.longlife_card = tonumber(key) elseif value.type == QUARTER then -- 季卡 pay_id.quarter_card = tonumber(key) elseif value.type == WEEK then -- 周卡 pay_id.week_card = tonumber(key) elseif value.type == SUPER_FUND then -- PK3-1394 超级成长基金 pay_id.super_fund = tonumber(key) end end pay_id_init = 1 end --根据名字得到玩家uid local function get_id(name) return skynet.call(namecenter,"lua","findby", name) end local function initialize() status = 1 namecenter = skynet.localname(".namecenter") usercenter = skynet.localname(".usercenter") local conf = assert(option.redis) db_character = redisdriver.connect(conf) db_character:select(0) end -- 周/月 礼包处理 local function direct_recharge_gift(char2, grade_num) local ACTIV_ID = 63 -- 活动类型 local activitytimemod_data = skynet.unpack(char2.activitytimemod) logger.trace(" #$### activitytimemod_data.activity_token[ACTIV_ID] %s", stringify(activitytimemod_data.activity_token[ACTIV_ID] or {})) if activitytimemod_data.activity_token[ACTIV_ID] then if activitytimemod_data.activity_token[ACTIV_ID].state ~= 0 then local TIME_SID = activitytimemod_data.activity_token[ACTIV_ID].sid local c_acti = assert(asset.activity_proto[TIME_SID], "activity_proto:" .. TIME_SID) local condition = c_acti.condition -- 挡位 local parameter4 = c_acti.parameter4 -- 购买次数 for k, v in ipairs(condition) do grade_num[v] = {sum = parameter4[k] or 0, yet=0} end -- 取出礼包数据 local direct_recharge_gift_data = skynet.unpack(char2.direct_recharge_gift) logger.trace(" ####### direct_recharge_gift_data %s", stringify(direct_recharge_gift_data)) for key, value in pairs(direct_recharge_gift_data.draw) do if condition[key] then grade_num[condition[key]].yet = value.can end end end end end -- 128基金 local function senior_check_in(char2, grade_num) local WEL_KEY = 112 -- 活动对应的welfare表key值 local order_id = assert(asset.welfare_proto[WEL_KEY].parameter2[3]) local senior_check_in_data = skynet.unpack(char2.senior_check_in) local id = order_id grade_num[id] = {sum = 1, yet = 0} logger.trace(" ####### senior_check_in_data %s", stringify(senior_check_in_data)) if senior_check_in_data.state > 0 then grade_num[id].yet = 1 end end -- 328基金 local function senior_check_in2(char2, grade_num) local WEL_KEY = 113 -- 活动对应的welfare表key值 local order_id = assert(asset.welfare_proto[WEL_KEY].parameter2[3]) local senior_check_in2_data = skynet.unpack(char2.senior_check_in2) local id = order_id grade_num[id] = {sum = 1, yet = 0} logger.trace(" ####### senior_check_in2_data %s", stringify(senior_check_in2_data)) if senior_check_in2_data.state > 0 then grade_num[id].yet = 1 end end -- 终生卡 local function longlife_card(char2,grade_num) local appreciation_card = skynet.unpack(char2.appreciation_card) local id = pay_id.longlife_card grade_num[id] = {sum = 1, yet = 0} logger.trace(" ####### longlife_card %s", stringify(appreciation_card)) appreciation_card.lifelongstate = appreciation_card.lifelongstate or 0 if tonumber(appreciation_card.lifelongstate) == 1 then grade_num[id].yet = 1 end end -- 周卡 local function week_card(char2,grade_num) local appreciation_card = skynet.unpack(char2.appreciation_card) local id = pay_id.week_card grade_num[id] = {sum = 1, yet = 0} logger.trace(" ####### week_card %s", stringify(appreciation_card)) appreciation_card.weektime = appreciation_card.weektime or 0 local now = os.time() if appreciation_card.weektime > now then grade_num[id].yet = 1 end end -- 月卡 local function month_card(char2,grade_num) local appreciation_card = skynet.unpack(char2.appreciation_card) local id = pay_id.month_card grade_num[id] = {sum = 1, yet = 0} logger.trace(" ####### month_card %s", stringify(appreciation_card)) local now = os.time() appreciation_card.monthtime = appreciation_card.monthtime or 0 if appreciation_card.monthtime > now then grade_num[id].yet = 1 end end -- 季卡 local function quarter_card(char2,grade_num) local appreciation_card = skynet.unpack(char2.appreciation_card) local id = pay_id.quarter_card if not id then return end grade_num[id] = {sum = 1, yet = 0} logger.trace(" ####### quarter_card %s", stringify(appreciation_card)) appreciation_card.quartertime = appreciation_card.quartertime or 0 local now = os.time() if appreciation_card.quartertime > now then grade_num[id].yet = 1 end end -- 成长基金 local function fund(char2,grade_num) local fund_data = skynet.unpack(char2.fund) local id = pay_id.fund grade_num[id] = {sum = 1, yet = 0} logger.trace(" ####### fund_data %s", stringify(fund_data)) if fund_data.state and fund_data.state > 0 then grade_num[id].yet = 1 end end -- 成长基金2.0 local function super_fund(char2, grade_num) local super_fund_data = skynet.unpack(char2.super_fund) local id = pay_id.super_fund grade_num[id] = {sum = 1, yet = 0} logger.trace(" ####### super_fund_data %s", stringify(super_fund_data)) super_fund_data.isbuy_state = super_fund_data.isbuy_state or 0 if super_fund_data.isbuy_state > 0 then grade_num[id].yet = 1 end end --解锁秘境宝藏 local function secret_manual(char2, grade_num) local ACTIV_ID = 96 -- 活动类型 local cfid = -1 local secret_manual_data = skynet.unpack(char2.secret_manual) if not secret_manual_data then return end logger.trace(" ####### super_fund_data %s", stringify(secret_manual_data)) if secret_manual_data.state > 0 then local activitytimemod = skynet.unpack(char2.activitytimemod) if activitytimemod.activity_token[ACTIV_ID] then local sid = activitytimemod.activity_token[ACTIV_ID].sid local c_acti = assert(asset.activity_proto[sid],"activity_proto:" .. sid) cfid = c_acti.condition[1] end end if cfid == -1 then return end local id = cfid grade_num[id] = {sum = 1, yet = 0} secret_manual_data.levelup = secret_manual_data.levelup or 0 if secret_manual_data.levelup > 0 then grade_num[id].yet = 1 end end -- 特惠礼包 CDPK3-102 local function special_gift(char2,grade_num) local special_gift = skynet.unpack(char2.special_gift) if special_gift.state > 0 then local activitytimemod = skynet.unpack(char2.activitytimemod) if activitytimemod.activity_token[38] then local sid = activitytimemod.activity_token[38].sid local c_acti = assert(asset.activity_proto[sid],"activity_proto:" .. sid) for k, cfid in ipairs(c_acti.condition) do local cnum = c_acti.parameter1[k] grade_num[cfid] = {sum = cnum, yet = 0} end for cfid, value in pairs(special_gift.yet_recharge) do grade_num[cfid].yet = value.rnum end end end end --请求方式1: http://服务器ip地址:端口号/webplayer?code=xxx&玩家uid --示例: http://192.168.1.102:8002/webplayer?code=xxx&uid=00-6477912978149613568 --http://192.168.108.4:9002/webplayer?code=a7fd102b76268069hughskhfdksjhkaugjsdfdksjkjdfbuis1557041324&name==庞德的小煜 local webplayer = function(args, ipaddr,header) return synchronized(function() logger.trace("处理来自主机 %s 的获取玩家数据请求", ipaddr) if status == 0 then initialize() end if pay_id_init == 0 then init_payid() end if not whitelist[ipaddr] then -- return cjson.encode({state = 403, host = header.host, info = "不信任ip"}) end -- 验证gm账号 local code=string.sub(args.code,1,16) logger.trace(" ### code %s", args.code) if code ~= content.sign then return cjson.encode({state = 403,msg= "账号或密码错误"}) end local uid if args.name then uid =get_id(args.name) elseif args.uid then uid= args.uid elseif (not args.uid) and (not args.name) then return cjson.encode({state = 403,msg= "请输入玩家uid或者玩家name"}) end local k = string.format("character:%s", uid) local info if true == db_character:exists(k) then info = loader(uid) else return cjson.encode({state = 400,msg = "加载玩家数据失败", content= uid}) end if next(info) then local player = {} player.level = info.level --玩家等级 player.vip = info.vip --玩家的vip等级 player.nickname = info.nickname --玩家名字 player.uid = info.uid --玩家的uid local grade_num = {} -- 处理玩家充值数据 direct_recharge_gift(info, grade_num) senior_check_in(info, grade_num) super_fund(info, grade_num) senior_check_in2(info, grade_num) secret_manual(info,grade_num) fund(info,grade_num) special_gift(info,grade_num) -- CDPK3-102 longlife_card(info,grade_num) week_card(info,grade_num) month_card(info,grade_num) quarter_card(info,grade_num) player.grade_num = grade_num return cjson.encode({state=0,msg="success",content=player}) else return cjson.encode({state = 400, msg = "未找到该玩家"}) end end) end return webplayer