You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
441 lines
13 KiB
Lua
441 lines
13 KiB
Lua
-- 用户数据模型
|
|
local skynet = require "skynet"
|
|
local cjson = require "cjson"
|
|
local bagmodel = require "bagmodel"
|
|
local heromodel = require "heromodel"
|
|
local mqhelper = require "mqhelper"
|
|
local settings = require "settings"
|
|
local lordlogic = require "lordlogic"
|
|
local viplogic = require "viplogic"
|
|
local boxlogic = require "boxlogic"
|
|
local booklogic = require "booklogic"
|
|
local dateutils = require "dateutils"
|
|
local utils = require "utils"
|
|
|
|
|
|
local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)"
|
|
|
|
local usermodel = {}
|
|
|
|
require "functions"
|
|
|
|
function usermodel:init(user)
|
|
self.uid = user.uid
|
|
self.serverid = user.serverid
|
|
self.openid = user.openid
|
|
self.unionid = user.unionid
|
|
self.nickname = user.nickname
|
|
self.avatar = user.avatar
|
|
self.is_update = user.is_update or 0
|
|
self.lv = user.lv or 1--主公等级
|
|
self.stage = user.stage or 0 --当前阶
|
|
self.max_level = user.max_level or 1--关卡
|
|
self.owner = user.owner or 0
|
|
self.recharge_total = user.recharge_total or 0 --充值总数
|
|
self.recruit_num = user.recruit_num or 0 --招募次数
|
|
self.openbox_num = user.openbox_num or 0 --宝箱开启次数
|
|
self.blackmarket_num = user.blackmarket_num or 0 --黑市购买次数
|
|
self.coinget_num = user.coinget_num or 0 --点金次数
|
|
self.click_num = user.click_num or 0 --点击次数
|
|
self.tower_level = user.tower_level or 1 --咸将塔 关
|
|
self.online_status = user.online_status
|
|
self.login_day = user.login_day or 0 --登录天数
|
|
self.box_score = user.box_score or 0
|
|
self.box_stage = user.box_stage or 1
|
|
self.emblemstar = user.emblemstar or 0 --徽星数量
|
|
self.emblemstarid = user.emblemstarid or 0
|
|
self.fishing_score = user.fishing_score or 0
|
|
self.fishing_num_lv1 = user.fishing_num_lv1 or 0
|
|
self.fishing_num_lv2 = user.fishing_num_lv2 or 0
|
|
self.last_use_xyg_time = user.last_use_xyg_time or 0
|
|
self.last_use_nengliang_time = user.last_use_nengliang_time or 0
|
|
self.arena_level = user.arena_level or 1 -- 竞技场等级
|
|
self.last_recruit_time = user.last_recruit_time or 0
|
|
self.last_fishing_time = user.last_fishing_time or 0
|
|
self.last_login_time = user.last_login_time
|
|
self.last_logout_time = user.last_logout_time
|
|
end
|
|
|
|
|
|
function usermodel:login()
|
|
self.last_login_time = os.date("%Y-%m-%d %H:%M:%S")
|
|
self.online_status = 1
|
|
end
|
|
|
|
function usermodel:getserverid()
|
|
return self.serverid
|
|
end
|
|
|
|
function usermodel:getServer()
|
|
return utils.getserver(self.serverid)
|
|
end
|
|
|
|
--获取竞技场组
|
|
function usermodel:getArenaServer()
|
|
return utils.getarenserver(self.serverid, self.arena_level)
|
|
end
|
|
|
|
function usermodel:getBaiFuServer()
|
|
return utils.getbaifuserver(self.serverid)
|
|
end
|
|
|
|
--更新招募时间
|
|
function usermodel:updaterecruittime()
|
|
self.last_recruit_time = os.time()
|
|
self:save({last_recruit_time=self.last_recruit_time})
|
|
end
|
|
|
|
--检查是否免费 true 免费
|
|
function usermodel:checkrecruit()
|
|
if self.last_recruit_time == 0 then
|
|
return true
|
|
end
|
|
local d = dateutils.calday(os.time() ,self.last_recruit_time)
|
|
if d ~= 0 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
|
|
--更新钓鱼时间
|
|
function usermodel:updatefishingtime()
|
|
self.last_fishing_time = os.time()
|
|
self:save({last_fishing_time=self.last_fishing_time})
|
|
end
|
|
|
|
--检查是否免费钓鱼 true 免费
|
|
function usermodel:checkfishing()
|
|
if self.last_fishing_time == 0 then
|
|
return true
|
|
end
|
|
if os.time() - self.last_fishing_time >= 8*3600 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function usermodel:caloverfishingtimelong()
|
|
if os.time() - self.last_fishing_time >= 8*3600 then
|
|
return 0
|
|
end
|
|
local t = os.time() - self.last_fishing_time
|
|
return math.max(0, 8*3600 - t)
|
|
end
|
|
|
|
function usermodel:caloverrecruittimelong()
|
|
local d = dateutils.calday(os.time() ,self.last_recruit_time)
|
|
if d ~= 0 then
|
|
return 0
|
|
end
|
|
return math.max(0, dateutils.onedayover() - os.time())
|
|
end
|
|
|
|
--添加招募次数
|
|
function usermodel:addrecruitnum(num)
|
|
self.recruit_num = self.recruit_num + num
|
|
end
|
|
|
|
function usermodel:addopenboxnum(num)
|
|
self.openbox_num = self.openbox_num + num
|
|
end
|
|
|
|
function usermodel:addblackmarketnum(num)
|
|
self.blackmarket_num = self.blackmarket_num + num
|
|
end
|
|
|
|
function usermodel:addcoingetnum(num)
|
|
self.coinget_num = self.coinget_num + num
|
|
end
|
|
|
|
function usermodel:addclicknum(num)
|
|
self.click_num = self.click_num + num
|
|
end
|
|
|
|
--增加徽星
|
|
function usermodel:incremblemstar(star)
|
|
self.emblemstar = self.emblemstar + star
|
|
-- self:save({emblemstar=self.emblemstar})
|
|
end
|
|
|
|
--是否可以领取
|
|
function usermodel:canreceiveremblemstar()
|
|
local emblemstarid = self.emblemstarid
|
|
local cfg = booklogic.getcurbookstage(emblemstarid + 1)
|
|
local start = cfg.start
|
|
local emblemstar = self.emblemstar
|
|
if emblemstar >= start then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
|
|
--领取
|
|
function usermodel:receiveremblemstar()
|
|
self.emblemstarid = self.emblemstarid + 1
|
|
end
|
|
|
|
function usermodel:incrboxscore(num)
|
|
self.box_score = self.box_score + num
|
|
end
|
|
|
|
function usermodel:decrboxscore(num)
|
|
self.box_score = self.box_score - num
|
|
end
|
|
|
|
function usermodel:updateboxscore(score)
|
|
self.box_score = score
|
|
end
|
|
|
|
function usermodel:updateboxstage(stage)
|
|
self.box_stage = stage
|
|
end
|
|
|
|
function usermodel:boxstageup()
|
|
local cfg = boxlogic.getstageconf()
|
|
if self.box_stage == 9 then
|
|
self.box_stage = 1
|
|
else
|
|
self.box_stage = self.box_stage + 1
|
|
end
|
|
end
|
|
|
|
function usermodel:checkcanreceivebox()
|
|
local cfg = boxlogic.getstageconfbystage(self.box_stage)
|
|
assert(cfg ~= nil, "配置获取失败")
|
|
local limit = cfg.limit
|
|
if self.box_score >= limit then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function usermodel:getcurattr()
|
|
local userinfo = {}
|
|
userinfo.uid = self.uid
|
|
userinfo.lv = self.lv --主公等级
|
|
userinfo.stage = self.stage
|
|
return userinfo
|
|
end
|
|
|
|
function usermodel:serialize()
|
|
local userinfo = {}
|
|
userinfo.uid = self.uid
|
|
userinfo.serverid = self.serverid
|
|
userinfo.nickname = self.nickname
|
|
userinfo.avatar = self.avatar
|
|
userinfo.lv = self.lv --主公等级
|
|
userinfo.stage = self.stage
|
|
userinfo.max_level = self.max_level --关卡
|
|
userinfo.tower_level = self.tower_level
|
|
userinfo.cur_tower_level = self:calcurtowerlevel()
|
|
userinfo.vip_lv = self:getviplv() --vip等级
|
|
userinfo.recharge_total = self.recharge_total --充值总数
|
|
userinfo.recharge_day = self.recharge_day
|
|
userinfo.emblemstar = self.emblemstar
|
|
userinfo.emblemstarid = self.emblemstarid
|
|
userinfo.fishing_score = self.fishing_score
|
|
userinfo.fishing_num_lv1= self.fishing_num_lv1
|
|
userinfo.fishing_num_lv2= self.fishing_num_lv2
|
|
userinfo.owner = self.owner
|
|
userinfo.last_use_xyg_time = self.last_use_xyg_time
|
|
userinfo.last_use_nengliang_time = self.last_use_nengliang_time
|
|
userinfo.recruit_over_timelong = self:caloverrecruittimelong()
|
|
userinfo.fishing_over_timelong = self:caloverfishingtimelong()
|
|
userinfo.box_score = self.box_score
|
|
userinfo.box_stage = self.box_stage
|
|
userinfo.clk = self:getclk()
|
|
userinfo.atk = self:getatk()
|
|
userinfo.hp = self:gethp()
|
|
userinfo.def = self:getdef()
|
|
userinfo.zhanli = self:getzhanli()
|
|
return userinfo
|
|
end
|
|
|
|
function usermodel:getclk()
|
|
return lordlogic.getclk(self.lv - 1)
|
|
end
|
|
|
|
function usermodel:getatk()
|
|
return lordlogic.getatk(self.lv - 1)
|
|
end
|
|
|
|
function usermodel:gethp()
|
|
return lordlogic.gethp(self.lv - 1)
|
|
end
|
|
|
|
function usermodel:getdef()
|
|
return lordlogic.getdef(self.lv - 1)
|
|
end
|
|
|
|
|
|
function usermodel:getlordorderext(k)
|
|
return lordlogic.getlordorderext(k, self.stage)
|
|
end
|
|
|
|
--[[
|
|
战斗力=攻击力*1+血量*0.21+防御*0.74+速度*1
|
|
]]
|
|
function usermodel:getzhanli()
|
|
return heromodel:gettotalzhanli()
|
|
end
|
|
|
|
--当前塔的阶段
|
|
function usermodel:calcurtowerstage()
|
|
return math.ceil(self.tower_level/10)
|
|
end
|
|
|
|
--上一个塔的阶段
|
|
function usermodel:callasttowerstage()
|
|
return math.floor((self.tower_level - 1)/10)
|
|
end
|
|
|
|
--当前塔的层数
|
|
function usermodel:calcurtowerlevel()
|
|
return math.floor((self.tower_level - 1)%10 + 1)
|
|
end
|
|
|
|
function usermodel:towerlevelup()
|
|
self.tower_level = self.tower_level + 1
|
|
self:save({tower_level=self.tower_level})
|
|
end
|
|
|
|
function usermodel:settowerstatus(status)
|
|
self.tower_status = status
|
|
end
|
|
|
|
--获取到他人可以看到的信息
|
|
function usermodel:get_look_info()
|
|
local userinfo = {}
|
|
userinfo.uid = self.uid
|
|
userinfo.serverid = self.serverid
|
|
userinfo.nickname = self.nickname
|
|
userinfo.avatar = self.avatar
|
|
userinfo.max_level = self.max_level
|
|
return userinfo
|
|
end
|
|
|
|
|
|
--使用小鱼干
|
|
function usermodel:usexiaoyugan()
|
|
self.last_use_xyg_time = os.time()
|
|
self:save({last_use_xyg_time=self.last_use_xyg_time})
|
|
end
|
|
|
|
--使用能量
|
|
function usermodel:usenengliang()
|
|
self.last_use_nengliang_time = os.time()
|
|
self:save({last_use_nengliang_time=self.last_use_nengliang_time})
|
|
end
|
|
|
|
--升级
|
|
function usermodel:lvup(num)
|
|
self.lv = self.lv + num
|
|
self:save({lv=self.lv})
|
|
end
|
|
|
|
function usermodel:stageup()
|
|
self.stage = self.stage + 1
|
|
self:save({stage=self.stage})
|
|
end
|
|
|
|
--下一关
|
|
function usermodel:incrlevel()
|
|
self.max_level = self.max_level + 1
|
|
self:save({max_level=self.max_level})
|
|
end
|
|
|
|
function usermodel:incrrechargetotal(t)
|
|
self.recharge_total = self.recharge_total + t
|
|
self:save({recharge_total=self.recharge_total})
|
|
end
|
|
|
|
function usermodel:getviplv()
|
|
local lv = viplogic.getviplv(self.recharge_total)
|
|
return lv
|
|
end
|
|
|
|
|
|
function usermodel:getfishingnum(lv)
|
|
return self["fishing_num_lv"..lv] or 0
|
|
end
|
|
|
|
function usermodel:incrfishingnum(lv, num)
|
|
self["fishing_num_lv"..lv] = self["fishing_num_lv"..lv] + num
|
|
end
|
|
|
|
--添加捕获积分
|
|
function usermodel:incrfishingscore(num)
|
|
self.fishing_score = self.fishing_score + num
|
|
self:save({fishing_score=self.fishing_score})
|
|
end
|
|
|
|
--添加捕获积分
|
|
function usermodel:decrfishingscore(num)
|
|
self.fishing_score = self.fishing_score - num*20
|
|
self:save({fishing_score=self.fishing_score})
|
|
end
|
|
|
|
--用户离线
|
|
function usermodel:logout()
|
|
skynet.error(string.format("user %d logout", UID))
|
|
self.last_logout_time = os.date("%Y-%m-%d %H:%M:%S")
|
|
self.online_status = 0
|
|
self:save({last_logout_time=self.last_logout_time, online_status=self.online_status})
|
|
end
|
|
|
|
function usermodel:savenickname(nickname)
|
|
self.nickname = nickname
|
|
self.is_update = 1
|
|
self:save({nickname=self.nickname, is_update=self.is_update})
|
|
end
|
|
|
|
function usermodel:saveavatar(avatar)
|
|
self.avatar = avatar
|
|
self:save({avatar=self.avatar})
|
|
end
|
|
|
|
--全量保存
|
|
function usermodel:saveall()
|
|
local userinfo = {}
|
|
userinfo.is_update = self.is_update
|
|
userinfo.lv = self.lv
|
|
userinfo.stage = self.stage
|
|
userinfo.max_level = self.max_level
|
|
userinfo.recharge_total = self.recharge_total
|
|
userinfo.recruit_num = self.recruit_num
|
|
userinfo.openbox_num = self.openbox_num
|
|
userinfo.blackmarket_num = self.blackmarket_num
|
|
userinfo.coinget_num = self.coinget_num
|
|
userinfo.click_num = self.click_num
|
|
userinfo.tower_level = self.tower_level
|
|
userinfo.online_status = self.online_status
|
|
userinfo.login_day = self.login_day
|
|
userinfo.box_score = self.box_score
|
|
userinfo.box_stage = self.box_stage
|
|
userinfo.emblemstar = self.emblemstar
|
|
userinfo.emblemstarid = self.emblemstarid
|
|
userinfo.fishing_score = self.fishing_score
|
|
userinfo.fishing_num_lv1= self.fishing_num_lv1
|
|
userinfo.fishing_num_lv2= self.fishing_num_lv2
|
|
userinfo.owner = self.owner
|
|
userinfo.last_use_xyg_time = self.last_use_xyg_time
|
|
userinfo.last_use_nengliang_time = self.last_use_nengliang_time
|
|
userinfo.last_recruit_time = self.last_recruit_time
|
|
userinfo.last_fishing_time = self.last_fishing_time
|
|
self:save(userinfo)
|
|
end
|
|
|
|
--保存用户信息
|
|
function usermodel:save(data)
|
|
skynet.error(string.format("user %d save to db", UID))
|
|
DEBUG("save data = ", DUMP(data))
|
|
assert(not table.empty(data), " user save data 数据错误 ")
|
|
local ok = skynet.call(".usercenterd", "lua", "saveuser", UID, data)
|
|
local ok = mqhelper.exec("upsert", UID, settings.user_mongodb_key.tname, settings.user_mongodb_key.cname, {["$set"]=data}, {uid=UID})
|
|
end
|
|
|
|
|
|
return usermodel
|