|
|
@@ -75,6 +75,7 @@ local WeekTaskLogic = require("dailyTask.WeekTaskLogic")
|
|
|
local TriggerLogic = require("trigger.TriggerLogic")
|
|
|
local TriggerDefine = require("trigger.TriggerDefine")
|
|
|
local OverflowFundLogic = require("present.OverflowFundLogic")
|
|
|
+local Log = require("common.Log")
|
|
|
|
|
|
local queryFields = {["uuid"] = 1}
|
|
|
local queryFieldsList = {}
|
|
|
@@ -427,7 +428,13 @@ function getBoxState(drill, index)
|
|
|
end
|
|
|
|
|
|
-- 查询关卡Id
|
|
|
-function queryDrillId(human, drillData)
|
|
|
+function queryDrillId(human, drillData, openPanel)
|
|
|
+ -- openPanel: 是否打开界面,默认为true(打开界面)
|
|
|
+ -- false-不打开界面,只刷新数据;true-打开界面
|
|
|
+ if openPanel == nil then
|
|
|
+ openPanel = true -- 默认打开界面
|
|
|
+ end
|
|
|
+
|
|
|
drillData = drillData or DrillDB.getDrillDataByUuid(human.db._id)
|
|
|
if not drillData then -- 没有记录 请求第一关
|
|
|
fixDrillDB(human)
|
|
|
@@ -435,6 +442,15 @@ function queryDrillId(human, drillData)
|
|
|
end
|
|
|
|
|
|
local drill = human.db.drill
|
|
|
+ if not drill then
|
|
|
+ -- drill 数据不存在,初始化
|
|
|
+ fixDrillDB(human)
|
|
|
+ drill = human.db.drill
|
|
|
+ if not drill then
|
|
|
+ return diffChoseQuery(human)
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
local diff = drill.diff
|
|
|
if not drill.diff or drill.diff == 0 then
|
|
|
diff = drillData.diff
|
|
|
@@ -445,23 +461,37 @@ function queryDrillId(human, drillData)
|
|
|
end
|
|
|
|
|
|
local msgRet = Msg.gc.GC_DRILL_ID
|
|
|
- msgRet.drillId = drillData.drillId
|
|
|
- msgRet.diff = diff
|
|
|
- msgRet.maxDiff = drill.maxDiff
|
|
|
- msgRet.dayGet[0] = 2
|
|
|
- local dayJinbi = drill.dayGet and drill.dayGet[ItemDefine.ITEM_JINBI_ID] or 0
|
|
|
- local dayCoin = drill.dayGet and drill.dayGet[ItemDefine.ITEM_DRILL_COIN_ID] or 0
|
|
|
- Grid.makeItem(msgRet.dayGet[1], ItemDefine.ITEM_JINBI_ID, dayJinbi )
|
|
|
- Grid.makeItem(msgRet.dayGet[2], ItemDefine.ITEM_DRILL_COIN_ID, dayCoin )
|
|
|
-
|
|
|
+ -- 按照协议定义的顺序赋值
|
|
|
+ -- 1. drillId (byte类型,范围0-255,防止溢出)
|
|
|
+ local drillIdValue = drillData.drillId or 1
|
|
|
+ if drillIdValue > 255 or drillIdValue < 0 then
|
|
|
+ Log.write(Log.LOGID_DEBUG, "[queryDrillId] WARNING: drillId溢出,原始值="..drillIdValue..",限制后="..math.min(math.max(drillIdValue, 0), 255))
|
|
|
+ end
|
|
|
+ msgRet.drillId = math.min(math.max(drillIdValue, 0), 255)
|
|
|
+ -- 2. diff (byte类型,范围0-255,防止溢出)
|
|
|
+ local diffValue = diff or 1
|
|
|
+ if diffValue > 255 or diffValue < 0 then
|
|
|
+ Log.write(Log.LOGID_DEBUG, "[queryDrillId] WARNING: diff溢出,原始值="..diffValue..",限制后="..math.min(math.max(diffValue, 0), 255))
|
|
|
+ end
|
|
|
+ msgRet.diff = math.min(math.max(diffValue, 0), 255)
|
|
|
+ -- 3. box (数组) - 协议定义最大长度为5
|
|
|
+ local boxCount = math.min(#DrillExcel.box, 5)
|
|
|
+ msgRet.box[0] = boxCount
|
|
|
--秘宝加成
|
|
|
local talismanAdd_jinbi = getTalismanAdd(human)
|
|
|
-
|
|
|
- msgRet.box[0] = #DrillExcel.box
|
|
|
- for k, config in ipairs(DrillExcel.box) do
|
|
|
+ for k = 1, boxCount do
|
|
|
+ local config = DrillExcel.box[k]
|
|
|
local net = msgRet.box[k]
|
|
|
- net.index = k
|
|
|
- net.needId= config.needDrill
|
|
|
+ -- index 和 needId 都是 byte 类型,防止溢出
|
|
|
+ if k > 255 or k < 0 then
|
|
|
+ Log.write(Log.LOGID_DEBUG, "[queryDrillId] WARNING: box index溢出,原始值="..k..",限制后="..math.min(math.max(k, 0), 255))
|
|
|
+ end
|
|
|
+ net.index = math.min(math.max(k, 0), 255)
|
|
|
+ local needIdValue = config.needDrill or 0
|
|
|
+ if needIdValue > 255 or needIdValue < 0 then
|
|
|
+ Log.write(Log.LOGID_DEBUG, "[queryDrillId] WARNING: box needId溢出,原始值="..needIdValue..",限制后="..math.min(math.max(needIdValue, 0), 255))
|
|
|
+ end
|
|
|
+ net.needId = math.min(math.max(needIdValue, 0), 255)
|
|
|
net.state = getBoxState(drill, k)
|
|
|
local itemID1 = config["items"..diff][1][1]
|
|
|
local itemCnt1 = config["items"..diff][1][2]
|
|
|
@@ -490,6 +520,51 @@ function queryDrillId(human, drillData)
|
|
|
net.reward[0] = 3
|
|
|
end
|
|
|
end
|
|
|
+ -- 4. dayGet (数组)
|
|
|
+ msgRet.dayGet[0] = 2
|
|
|
+ local dayJinbi = drill.dayGet and drill.dayGet[ItemDefine.ITEM_JINBI_ID] or 0
|
|
|
+ local dayCoin = drill.dayGet and drill.dayGet[ItemDefine.ITEM_DRILL_COIN_ID] or 0
|
|
|
+ Grid.makeItem(msgRet.dayGet[1], ItemDefine.ITEM_JINBI_ID, dayJinbi )
|
|
|
+ Grid.makeItem(msgRet.dayGet[2], ItemDefine.ITEM_DRILL_COIN_ID, dayCoin )
|
|
|
+ -- 5. maxDiff (byte类型,范围0-255,防止溢出)
|
|
|
+ -- 注意:如果 maxDiff 为 0,应该视为未设置,使用默认值 1(因为 0 在 Lua 中是 truthy)
|
|
|
+ local maxDiffValue = (drill.maxDiff == nil or drill.maxDiff == 0) and 1 or drill.maxDiff
|
|
|
+ if maxDiffValue > 255 or maxDiffValue < 0 then
|
|
|
+ Log.write(Log.LOGID_DEBUG, "[queryDrillId] WARNING: maxDiff溢出,原始值="..maxDiffValue..",限制后="..math.min(math.max(maxDiffValue, 0), 255))
|
|
|
+ end
|
|
|
+ msgRet.maxDiff = math.min(math.max(maxDiffValue, 0), 255)
|
|
|
+ -- 6. canOneClickSaodang
|
|
|
+ -- 计算是否开启一键扫荡
|
|
|
+ local canOneClickSaodang = 0
|
|
|
+ -- 检查是否购买了基金
|
|
|
+ local overflowState = human.db.overflow and human.db.overflow.state and human.db.overflow.state[OverflowFundLogic.OVERFLOW_TYPE_2]
|
|
|
+ local hasFund = overflowState ~= nil
|
|
|
+ Log.write(Log.LOGID_DEBUG, "[queryDrillId] 检查基金状态: overflow="..tostring(human.db.overflow ~= nil)..", state="..tostring(human.db.overflow and human.db.overflow.state ~= nil)..", overflowState[2]="..tostring(overflowState)..", hasFund="..tostring(hasFund))
|
|
|
+ if hasFund then
|
|
|
+ -- 检查试炼是否开启
|
|
|
+ local drillOpen = isOpen(human, false)
|
|
|
+ if drillOpen then
|
|
|
+ -- 检查是否有 drill 数据
|
|
|
+ if drill then
|
|
|
+ -- 检查是否有 drillData 数据
|
|
|
+ if drillData then
|
|
|
+ -- 检查 diff 不为 0
|
|
|
+ if diff ~= 0 then
|
|
|
+ -- 检查当前关卡ID > 1
|
|
|
+ local currentDrillId = drillData.drillId or 1
|
|
|
+ if currentDrillId > 1 then
|
|
|
+ -- 已购买基金且满足其他条件,开启一键扫荡(已去掉等级限制)
|
|
|
+ canOneClickSaodang = 1
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ msgRet.canOneClickSaodang = canOneClickSaodang
|
|
|
+ -- 7. openPanel
|
|
|
+ msgRet.openPanel = (openPanel == true) and 1 or 0
|
|
|
+
|
|
|
-- Msg.trace(msgRet)
|
|
|
Msg.send(msgRet, human.fd)
|
|
|
end
|
|
|
@@ -1714,21 +1789,25 @@ end
|
|
|
function oneClickSaodang(human)
|
|
|
-- 检查是否购买了基金(购买项207)
|
|
|
if not human.db.overflow or not human.db.overflow.state or not human.db.overflow.state[OverflowFundLogic.OVERFLOW_TYPE_2] then
|
|
|
+ Log.write(Log.LOGID_DEBUG, "[oneClickSaodang] 未购买奢华基金(OVERFLOW_TYPE_2)")
|
|
|
return
|
|
|
end
|
|
|
|
|
|
-- 检查是否开启了试炼
|
|
|
if not isOpen(human, true) then
|
|
|
+ Log.write(Log.LOGID_DEBUG, "[oneClickSaodang] 试炼未开启")
|
|
|
return
|
|
|
end
|
|
|
|
|
|
local drill = human.db.drill
|
|
|
if not drill then
|
|
|
+ Log.write(Log.LOGID_DEBUG, "[oneClickSaodang] drill为nil")
|
|
|
return
|
|
|
end
|
|
|
|
|
|
local drillData = DrillDB.getDrillDataByUuid(human.db._id)
|
|
|
if not drillData then
|
|
|
+ Log.write(Log.LOGID_DEBUG, "[oneClickSaodang] drillData为nil")
|
|
|
return
|
|
|
end
|
|
|
|
|
|
@@ -1738,19 +1817,16 @@ function oneClickSaodang(human)
|
|
|
end
|
|
|
|
|
|
if diff == 0 then
|
|
|
+ Log.write(Log.LOGID_DEBUG, "[oneClickSaodang] diff="..diff..",需要!=0")
|
|
|
return
|
|
|
end
|
|
|
|
|
|
- -- 获取当前关卡ID
|
|
|
+ ---- 获取当前关卡ID
|
|
|
local currentDrillId = drillData.drillId or 1
|
|
|
- if currentDrillId <= 1 then
|
|
|
- return
|
|
|
- end
|
|
|
-
|
|
|
- -- 检查是否有可扫荡的关卡(需要达到等级要求)
|
|
|
- if human.db.lv < SAODANG_COND_LEVEL then
|
|
|
- return
|
|
|
- end
|
|
|
+ --if currentDrillId <= 1 then
|
|
|
+ -- Log.write(Log.LOGID_DEBUG, "[oneClickSaodang] 当前关卡ID="..currentDrillId..",需要>1")
|
|
|
+ -- return
|
|
|
+ --end
|
|
|
|
|
|
-- 计算可扫荡的关卡数(从1到currentDrillId-1,最多扫荡到currentDrillId-1)
|
|
|
local maxSaodangId = currentDrillId - 1
|