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.
165 lines
5.7 KiB
Lua
165 lines
5.7 KiB
Lua
local skynet = require "skynet"
|
|
local netpack = require "websocketnetpack"
|
|
local msgutils = require "msgutils"
|
|
local cjson = require "cjson"
|
|
local usermodel = require "usermodel"
|
|
local bagmodel = require "bagmodel"
|
|
local heromodel = require "heromodel"
|
|
local settings = require "settings"
|
|
local bson = require "bson"
|
|
local mqhelper = require "mqhelper"
|
|
local mongohelper = require "mongohelper"
|
|
local dateutils = require "dateutils"
|
|
local towerlogic = require "towerlogic"
|
|
|
|
--咸将塔
|
|
|
|
local function caltowerlevel(n)
|
|
return string.format("第%s层", tostring(math.floor(n/10)+1).."-"..tostring(math.floor((n-1)%10+1)))
|
|
end
|
|
|
|
local tower = {}
|
|
|
|
|
|
function tower.loadtower(cmd)
|
|
local laststage = usermodel:callasttowerstage()
|
|
local ok, laststatus = pcall(skynet.call, ".towerd", "lua", "gettowerstatus", UID, laststage)
|
|
if not ok then
|
|
laststatus = 0
|
|
end
|
|
return {c = "tower",m = "loadtower", data = {errcode = 0, data = { laststage=laststage, laststatus=laststatus }}}
|
|
end
|
|
|
|
--获取排行榜
|
|
function tower.loadrank(cmd)
|
|
local ok, list = pcall(skynet.call, ".towerd", "lua", "loadrank", UID, usermodel:getServer())
|
|
local players = {}
|
|
local found = false
|
|
local users = {}
|
|
if ok then
|
|
for k,v in pairs(list) do
|
|
table.insert(players, {uid=checkint(k), level=checkint(v)})
|
|
table.insert(users, checkint(k))
|
|
if checkint(k) == UID then
|
|
found = true
|
|
end
|
|
end
|
|
end
|
|
local rank = 0
|
|
|
|
if not found then
|
|
local ok, r = pcall(skynet.call, ".towerd", "lua", "loadmyrank", UID, usermodel:getServer())
|
|
if ok then
|
|
rank = r
|
|
end
|
|
end
|
|
|
|
table.sort( players, function(a, b)
|
|
if a.level == b.level then
|
|
return checkint(a.uid) > checkint(b.uid)
|
|
end
|
|
return a.level > b.level
|
|
end)
|
|
|
|
local ok, res = pcall(skynet.call, ".usercenterd", "lua", "getuserinfolist", users)
|
|
if ok then
|
|
for i,v in ipairs(players) do
|
|
v.nickname = res[v.uid].nickname
|
|
v.avatar = res[v.uid].avatar
|
|
v.zhanli = res[v.uid].zhanli
|
|
v.level = caltowerlevel(v.level)
|
|
if checkint(v.uid) == UID then
|
|
rank = i
|
|
end
|
|
end
|
|
end
|
|
|
|
return {c = "tower",m = "loadrank", data = {errcode = 0, data = { players = table.array(players) , myrank = rank}}}
|
|
end
|
|
|
|
function tower.start(cmd)
|
|
local laststage = usermodel:callasttowerstage()
|
|
local laststatus = skynet.call(".towerd", "lua", "gettowerstatus", UID, laststage)
|
|
if laststage > 0 and laststatus == 0 then
|
|
return {c = "tower",m = "start", data = {errcode = 10001, errmsg = "请先领取上一个奖励", data = { }}}
|
|
end
|
|
local n = bagmodel:getxiaoyugan()
|
|
if n <= 0 then
|
|
return {c = "tower",m = "start", data = {errcode = 10002, errmsg = "数量不足", data = { }}}
|
|
end
|
|
-- DEBUG("tower start xiaoyugan = ", bagmodel:getxiaoyugan())
|
|
if bagmodel:getxiaoyugan() >= 10 then
|
|
usermodel:usexiaoyugan()
|
|
end
|
|
|
|
bagmodel:decrBagA("xiaoyugan", 1)
|
|
return {c = "tower",m = "start", data = {errcode = 0,data = { }}}
|
|
end
|
|
|
|
--挑战
|
|
function tower.battle(cmd)
|
|
local level = cmd.data.level
|
|
local tp = cmd.data.tp
|
|
if not level or not tp then
|
|
return {c = "tower",m = "battle", data = {errcode = 10001, errmsg = "请求异常", data = { }}}
|
|
end
|
|
level = checkint(level)
|
|
local cur_level = usermodel.tower_level
|
|
if cur_level ~= level then
|
|
return {c = "tower",m = "battle", data = {errcode = 10002, errmsg = "请求数据异常", data = { }}}
|
|
end
|
|
local laststage = usermodel:callasttowerstage()
|
|
-- DEBUG("battle laststage = ", laststage)
|
|
local laststatus = skynet.call(".towerd", "lua", "gettowerstatus", UID, laststage)
|
|
if laststage > 0 and laststatus == 0 then
|
|
return {c = "tower",m = "battle", data = {errcode = 10001, errmsg = "请先领取上一个奖励", data = { }}}
|
|
end
|
|
if tp == "success" then
|
|
local ok = skynet.call(".towerd", "lua", "success", UID, usermodel:getServer())
|
|
-- DEBUG("success = ", ok)
|
|
--TODO:发送奖励
|
|
local rewards = towerlogic.getrewards(level)
|
|
for i,v in ipairs(rewards) do
|
|
bagmodel:incrBagA(v.key, v.value)
|
|
end
|
|
usermodel:towerlevelup()
|
|
--TODO: 领取每日免费礼包mongo日志
|
|
local log = {
|
|
uid=UID,
|
|
serverid=usermodel.serverid,
|
|
level=level,
|
|
type=0,
|
|
rewards=rewards,
|
|
created_at=dateutils.get_datetime()
|
|
}
|
|
mqhelper.exec("insert", UID, settings.tower_log_mongodb_key.tname, settings.tower_log_mongodb_key.cname, log)
|
|
end
|
|
return {c = "tower",m = "battle", data = {errcode = 0,data = { }}}
|
|
end
|
|
|
|
|
|
--第10层 开启宝箱
|
|
function tower.openbox(cmd)
|
|
local cur_level = usermodel.tower_level
|
|
if math.floor(cur_level/10) == 0 then
|
|
return {c = "tower",m = "openbox", data = {errcode = 10002, errmsg = "请求数据异常", data = { }}}
|
|
end
|
|
local rewards = towerlogic.getboxrewards(usermodel:callasttowerstage())
|
|
for i,v in ipairs(rewards) do
|
|
bagmodel:incrBagA(v.key, v.value)
|
|
end
|
|
local ok = skynet.call(".towerd", "lua", "settowerstatus", UID, usermodel:callasttowerstage())
|
|
--TODO: 领取每日免费礼包mongo日志
|
|
local log = {
|
|
uid=UID,
|
|
serverid=usermodel.serverid,
|
|
level=cur_level,
|
|
type=1,
|
|
rewards=rewards,
|
|
created_at=dateutils.get_datetime()
|
|
}
|
|
mqhelper.exec("insert", UID, settings.tower_log_mongodb_key.tname, settings.tower_log_mongodb_key.cname, log)
|
|
return {c = "tower",m = "openbox", data = {errcode = 0,data = { }}}
|
|
end
|
|
|
|
return tower |