flowerpig 6 месяцев назад
Родитель
Сommit
07a851e7cf

+ 4 - 1
script/common/ProtoID.lua

@@ -1687,4 +1687,7 @@ _ENV[1718]="CG_ELF_POS_QUERY"
 _ENV[1719]="GC_ELF_POS_QUERY"
 _ENV[1720]="CG_COMBAT_ELFPOS_QUERY"
 _ENV[1721]="GC_COMBAT_ELFPOS_QUERY"
-_ENV[1722]="CG_COMBAT_ELFPOS_DO"
+_ENV[1722]="CG_COMBAT_ELFPOS_DO"
+
+_ENV[1723]="CG_DRILL_ONE_CLICK_SAODANG"
+_ENV[1724]="GC_DRILL_ONE_CLICK_SAODANG"

+ 98 - 0
script/module/drill/DrillLogic.lua

@@ -74,6 +74,7 @@ local TalismanLogic = require("talisman.TalismanLogic")
 local WeekTaskLogic = require("dailyTask.WeekTaskLogic")
 local TriggerLogic = require("trigger.TriggerLogic")
 local TriggerDefine = require("trigger.TriggerDefine")
+local OverflowFundLogic = require("present.OverflowFundLogic")
 
 local queryFields = {["uuid"] = 1}
 local queryFieldsList = {}
@@ -1707,4 +1708,101 @@ function ChallengeLevelByDiamond(human, levelId)
 
 	-- 发放奖励
 	BagLogic.addItemList(human, itemArray, "drill")
+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
+		return
+	end
+	
+	-- 检查是否开启了试炼
+	if not isOpen(human, true) then
+		return
+	end
+	
+	local drill = human.db.drill
+	if not drill then
+		return
+	end
+	
+	local drillData = DrillDB.getDrillDataByUuid(human.db._id)
+	if not drillData then
+		return
+	end
+	
+	local diff = drill.diff
+	if not drill.diff or drill.diff == 0 then
+		diff = drillData.diff
+	end
+	
+	if diff == 0 then
+		return
+	end
+	
+	-- 获取当前关卡ID
+	local currentDrillId = drillData.drillId or 1
+	if currentDrillId <= 1 then
+		return
+	end
+	
+	-- 检查是否有可扫荡的关卡(需要达到等级要求)
+	if human.db.lv < SAODANG_COND_LEVEL then
+		return
+	end
+	
+	-- 计算可扫荡的关卡数(从1到currentDrillId-1,最多扫荡到currentDrillId-1)
+	local maxSaodangId = currentDrillId - 1
+	if maxSaodangId < 1 then
+		return
+	end
+	
+	-- 双倍奖励
+	local double = RoleSystemLogic.isDouble(human, RoleSystemDefine.ROLE_SYS_ID_1204)
+	local rewardCnt = double and 2 or 1
+	
+	-- 秘宝加成
+	local talismanAdd_jinbi = getTalismanAdd(human)
+	
+	-- 初始化今日奖励
+	drill.dayGet = drill.dayGet or {}
+	
+	-- 遍历所有可扫荡的关卡,发放奖励
+	for i = 1, maxSaodangId do
+		local drillItems = getDrillItems(i, diff)
+		if drillItems then
+			for _, item in ipairs(drillItems) do
+				local itemID = item[1]
+				local itemCnt = item[2] * rewardCnt
+				if itemID == ItemDefine.ITEM_JINBI_ID then
+					itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd_jinbi)
+				end
+				
+				drill.dayGet[itemID] = (drill.dayGet[itemID] or 0) + itemCnt
+				BagLogic.addItem(human, itemID, itemCnt, "drill")
+			end
+		end
+	end
+	
+	-- 发送奖励消息
+	local msgRet = Msg.gc.GC_DRILL_ONE_CLICK_SAODANG
+	msgRet.drillId = maxSaodangId
+	msgRet.double = double and 1 or 0
+	
+	local len = 0
+	for k, v in pairs(drill.dayGet) do
+		len = len + 1
+		Grid.makeItem(msgRet.itemList[len], k, v)
+	end
+	msgRet.itemList[0] = len
+	
+	Msg.send(msgRet, human.fd)
+	
+	-- 更新数据
+	queryDrillId(human)
+	
+	-- 触发相关回调
+	YunYingLogic.onCallBack(human, "onDrill", maxSaodangId)
+	RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1204)
 end

+ 4 - 0
script/module/drill/Handler.lua

@@ -57,4 +57,8 @@ end
 
 function CG_DRILL_FIGHT_BY_DIAMON(human, msg)
 	DrillLogic.ChallengeLevelByDiamond(human, msg.levelID)
+end
+
+function CG_DRILL_ONE_CLICK_SAODANG(human)
+	DrillLogic.oneClickSaodang(human)
 end

+ 9 - 0
script/module/drill/Proto.lua

@@ -144,3 +144,12 @@ GC_DRILL_SAODANG_ITEM = {
 CG_DRILL_FIGHT_BY_DIAMON = {
     {"levelID",        1,      "byte"},      -- 当前关卡Id
 }
+
+-- 一键扫荡
+CG_DRILL_ONE_CLICK_SAODANG = {}
+
+GC_DRILL_ONE_CLICK_SAODANG = {
+    {"drillId",           1,    "int"},     -- 扫荡到的关卡ID
+    {"itemList",          5,    ItemData},  -- 奖励列表
+    {"double",            1,    "byte"},    -- 是否双倍
+}

+ 12 - 0
script/module/present/OverflowFundLogic.lua

@@ -90,6 +90,18 @@ function overflowQuery(human,type)
     msgRet.worth[1] = PresentExcel.overflowFund[1].worth
     msgRet.worth[2] = PresentExcel.luxuryFund[1].worth
     msgRet.worth[0] = 2
+    
+    -- 检查是否可以一键扫荡:购买项207(奢华基金)购买后开启一键扫荡权限
+    -- 购买项207对应的是奢华基金(OVERFLOW_TYPE_2)
+    local canOneClickSaodang = 0
+    if type == OVERFLOW_TYPE_2 then
+        -- 检查是否购买了奢华基金
+        if human.db.overflow and human.db.overflow.state and human.db.overflow.state[OVERFLOW_TYPE_2] then
+            canOneClickSaodang = 1
+        end
+    end
+    msgRet.canOneClickSaodang = canOneClickSaodang
+    
     Msg.send(msgRet,human.fd)
 end
 

+ 1 - 0
script/module/present/Proto.lua

@@ -777,6 +777,7 @@ GC_OVERFLOW_FUND_QUERY = {
     {"worth",           2,          "int"},     -- 总价值
     {"state",           1,          "byte"},    -- 0 未购买  1 领取 2 已领取
     {"type",            1,          "byte"},    -- 1 超值基金  2 奢华基金
+    {"canOneClickSaodang", 1,       "byte"},    -- 是否可以一键扫荡(勇者试炼) 0 不可以 1 可以
 }
 
 CG_OVERFLOW_FUND_GET = {