瀏覽代碼

1.增加夺宝奇兵活动。 2.增加新秘宝增益相关代码. 3.增加秘宝一键合成功能. 4.优化种族试炼系统代码

gitxsm 1 年之前
父節點
當前提交
8626354bc6

+ 1 - 0
script/common/LogDefine.lua

@@ -257,6 +257,7 @@ DEFINE = {
 	racialTrial				= 752,			-- 种族挑战
 	lotteryByDiamonds		= 753,			--古玉充能
 	talisman				= 754,			--秘宝
+	duobaoqibing			= 755,			--夺宝奇兵
 }
 
 

+ 9 - 0
script/common/ProtoID.lua

@@ -1308,3 +1308,12 @@ _ENV[1338]="CG_TALISMAN_QUERY"
 _ENV[1339]="GC_TALISMAN_QUERY"
 _ENV[1340]="CG_TALISMAN_UPGRADE"
 _ENV[1341]="GC_TALISMAN_UPGRADE"
+_ENV[1345]="GC_DBQB_QUERY"
+_ENV[1346]="CG_DBQB_LOTTERY"
+_ENV[1347]="GC_DBQB_LOTTERY"
+_ENV[1348]="CG_DBQB_RESET"
+_ENV[1349]="GC_DBQB_RESET"
+_ENV[1350]="CG_DBQB_START_GAME"
+_ENV[1351]="GC_DBQB_START_GAME"
+_ENV[1352]="CG_DBQB_TIPS"
+_ENV[1353]="GC_DBQB_TIPS"

+ 1 - 0
script/module/absAct/AbsActDefine.lua

@@ -29,6 +29,7 @@ ABS_ACT_TYPE_29 = 29  -- 古玉充能
 
 ABS_ACT_TYPE_30 = 30 -- 元宵双倍
 ABS_ACT_TYPE_31 = 31 -- 元宵新年卡
+ABS_ACT_TYPE_32 = 32 -- 限时夺宝/夺宝奇兵活动
 ABS_ACT_TYPE_33 = 33 -- 元宵喜庆来年
 ABS_ACT_TYPE_34 = 34 -- 魔兽双倍洗练
 ABS_ACT_TYPE_35 = 35 -- 新英雄抽卡

+ 4 - 1
script/module/absAct/AbsActLogic.lua

@@ -46,6 +46,7 @@ local DailyFixedTaskLogic = require("absAct.DailyFixedTaskLogic")
 local AbsSignGiftLogic = require("absAct.AbsSignGiftLogic")
 local NewHeroLogic = require("absAct.NewHeroLogic")
 local LotteryByDiamondLogic = require("absAct.LotteryByDiamondLogic")
+local DuoBaoQiBingLogic = require("absAct.DuoBaoQiBingLogic")
 
 ABS_ACT_TYPE_LIST = nil
 function initAfterHot()
@@ -192,7 +193,7 @@ function checkAbsActClean(human, id)
         return
     end
     --临时处理积分兑换 下版本删掉
-    if  human.db.absAct[id] and not human.db.absAct[id].finish then 
+    if  human.db.absAct[id] and not human.db.absAct[id].finish then
         if config.type ==  AbsActDefine.ABS_ACT_TYPE_7  then 
             human.db.absAct[id] = nil
         else
@@ -291,6 +292,8 @@ function actDetailQuery(human, id)
         AbsSignGiftLogic.getAndSendMsg(human, id)
     elseif config.type == AbsActDefine.ABS_ACT_TYPE_31 then
         DailyFixedTaskLogic.getAndSendMsg(human, id)
+    elseif config.type == AbsActDefine.ABS_ACT_TYPE_32 then
+        DuoBaoQiBingLogic.Query(human, id)
     elseif config.type == AbsActDefine.ABS_ACT_TYPE_33 then
         FestivalSevenDayCardLogic.getAndSendMsg(human, id)
     elseif config.type == AbsActDefine.ABS_ACT_TYPE_35 then

+ 409 - 0
script/module/absAct/DuoBaoQiBingLogic.lua

@@ -0,0 +1,409 @@
+--夺宝奇兵活动
+--玩法: 从四条配置中各随机一个奖励, 然后把这4个奖励按照一定数量组成一个奖池给玩家抽奖, 奖励抽到后就减少
+--注意事项:活动开启期间, 不能改4条配置中prizeData里各个奖励的顺序,因为服务器存储的是随机到的奖励的index
+--db
+--[=[
+        human.db.absAct[id] = {
+            awardData = {
+                [type] = {idx = 1, cnt = 1}, --key为奖池类型,idx为配置中随机到的奖励index,cnt表示当前奖励数量
+            },
+
+            isFreeReset = nil,    --免费重置标识, 1-免费
+
+            posData = {         --已经抽奖的位置, pos为位置
+                [pos] = {poolType = poolType, idx = idx}
+            },
+            isStart = nil,         --是否开始游戏
+            isTips = nil,          --提示, 为0时不提示,其他情况都提示
+            dailyFreeState = nil,  --每日单抽免费标识,为0时不免费,其他情况免费
+        }
+    }
+]=]--
+
+local Msg = require("core.Msg")
+local Grid = require("bag.Grid")
+local Util = require("common.Util")
+local BagLogic = require("bag.BagLogic")
+local ItemDefine = require("bag.ItemDefine")
+local AbsActLogic = require("absAct.AbsActLogic")
+local Broadcast = require("broadcast.Broadcast")
+local Lang = require("common.Lang")
+local duobaoCfg = require("excel.absAct").DuoBaoQiBing
+local YunYingLogic = require("yunying.YunYingLogic")
+local AbsActExcel = require("excel.absAct")
+
+local LOGTYPE = "duobaoqibing"      --日志标识
+local POOL1CNT = 30                 --从奖池1中抽取的奖励数量
+local POOL2CNT = 12                 --从奖池2中抽取的奖励数量
+local POOL3CNT = 2                  --从奖池3中抽取的奖励数量
+local POOL4CNT = 1                  --从奖池4中抽取的奖励数量
+local LOTTERYCOSTCNT = 400          --单抽消耗数量
+local RESETCOSTCNT = 1000           --重置消耗数量
+local COSTITEMID = ItemDefine.ITEM_ZUANSHI_ID  --单抽/重置消耗的道具id
+
+
+local function getAwardNumByType(poolType)
+    local num = 0
+    if not poolType then
+        return num
+    end
+    if poolType == 1 then
+        num = POOL1CNT
+    elseif poolType == 2 then
+        num = POOL2CNT
+    elseif poolType == 3 then
+        num = POOL3CNT
+    elseif poolType == 4 then
+        num = POOL4CNT
+    end
+    return num
+end
+
+
+
+--从配置中随机一个奖励,并返回奖励的index
+local function getAwardIdx(awardCfg)
+    local totalWeight = 0
+    for _, v in ipairs(awardCfg.prizeData) do
+        totalWeight = totalWeight + v[3]
+    end
+    local randWeight = math.random(0, totalWeight)
+
+    local weight, randIdx = 0, 0
+    for idx, data in ipairs(awardCfg.prizeData) do
+        weight = weight + data[3]
+        if randWeight <= weight then
+            randIdx = idx
+            break
+        end
+    end
+    return randIdx
+end
+
+--生成奖励数据
+local function generateAwardData(human, id)
+    human.db.absAct[id] = human.db.absAct[id] or {}
+    local actData = human.db.absAct[id]
+    actData.awardData = actData.awardData or {}
+    local awardData = actData.awardData
+
+    for type, cfg in ipairs(duobaoCfg) do
+        local awardIdx = getAwardIdx(cfg)
+        awardData[type] = {
+            idx = awardIdx,
+            cnt = getAwardNumByType(type),
+            --type = type
+        }
+    end
+end
+
+--填充协议数据
+local function populateMsg(actData, msgTb)
+    local awardData = actData.awardData
+    local posData = actData.posData
+
+    local awardNum, len = 0, 0
+    for i=1, 4 do
+        awardNum = getAwardNumByType(i)
+        local awardIdx = awardData[i].idx
+        local awardInfo = duobaoCfg[i].prizeData[awardIdx]
+
+        for j=1, awardNum do
+            len = len + 1
+            msgTb[len].isGet = 0
+            msgTb[len].poolType = i
+            msgTb[len].index = len
+            
+            Grid.makeItem(msgTb[len].item, awardInfo[1], awardInfo[2])
+
+            if posData and posData[len] then
+                msgTb[len].isGet = 1
+                local poolType = posData[len].poolType
+
+                --奖池类型不一样, 说明该位置抽到的是别的奖池的道具, 需要修改道具信息
+                if poolType ~= i then
+                    msgTb[len].poolType = poolType
+                    awardIdx = posData[len].idx
+                    local realAwardInfo = duobaoCfg[poolType].prizeData[awardIdx]
+                    Grid.makeItem(msgTb[len].item, realAwardInfo[1], realAwardInfo[2])
+                end
+            end
+        end
+    end
+    msgTb[0] = len
+end
+
+--生成抽奖数据
+local function generateLotteryData(actData)
+    local awardVec = {}
+    local len, totalWeight = 0,0
+    local awardData = actData.awardData
+    for type, data in ipairs(awardData) do
+        if data.cnt > 0 then
+            local awardInfo = duobaoCfg[type].prizeData[data.idx]
+            local itemId = awardInfo[1]
+            local itemNum = awardInfo[2]
+            local weight = awardInfo[3]
+            for i=1, data.cnt do
+                len = len + 1
+                totalWeight = totalWeight + weight
+                awardVec[len] = {itemId, itemNum, weight, type, data.idx}
+            end
+        end
+    end
+    return awardVec, totalWeight
+end
+
+--刷天处理
+function updateDaily(human, id)
+    local state = AbsActLogic.isStarted(human, id)
+    if not state then
+        return
+    end
+
+    local actData = human.db.absAct[id]
+    if not actData then
+        return
+    end
+    actData.isTips = 1
+
+    actData.dailyFreeState = 1
+end
+
+
+function isRed(human, YYInfo, absActConfig)
+    local id = absActConfig.funcID
+    local state = AbsActLogic.isStarted(human, id)
+    if not state then
+        return false
+    end
+
+    local actData = human.db.absAct[id]
+    if not actData then
+        return false
+    end
+
+    if actData.dailyFreeState and actData.dailyFreeState == 0 then
+        return false
+    end
+    return true
+end
+
+
+--查询
+function Query(human, id)
+    local state = AbsActLogic.isStarted(human, id)
+    if not state then
+        return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
+    end
+
+    local actData = human.db.absAct[id]
+    if not actData then
+        return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
+    end
+
+    local msgRet = Msg.gc.GC_DBQB_QUERY
+    msgRet.isFreeReset = actData.isFreeReset or 0
+    msgRet.isStart = actData.isStart or 0
+    msgRet.isTips = 1
+    if actData.isTips and actData.isTips == 0 then
+        msgRet.isTips = 0
+    end
+
+    msgRet.isFree = 0
+    if not actData.dailyFreeState or actData.dailyFreeState == 1 then
+        msgRet.isFree = 1
+    end
+
+    if not actData or not actData.awardData then
+        generateAwardData(human, id)
+    end
+
+    Grid.makeItem(msgRet.lotteryCost, COSTITEMID, LOTTERYCOSTCNT)
+    Grid.makeItem(msgRet.resetCost, COSTITEMID, RESETCOSTCNT)
+    populateMsg(actData, msgRet.awardPoolData)
+
+    Msg.send(msgRet, human.fd)
+end
+
+--奖池重置
+function ResetAwardPool(human, id, resetType)
+    if not id or not resetType then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    local state = AbsActLogic.isStarted(human, id)
+    if not state then
+        return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
+    end
+
+    local actData = human.db.absAct[id]
+    if not actData then
+        return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
+    end
+
+    if resetType == 1 then
+        if not actData.isFreeReset or actData.isFreeReset <= 0 then
+            return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
+        end
+        actData.isFreeReset = 0
+    elseif resetType == 2 then
+        if BagLogic.getItemCnt(human, COSTITEMID) < RESETCOSTCNT then
+            return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
+        end
+        BagLogic.delItem(human, COSTITEMID, RESETCOSTCNT, LOGTYPE)
+    else
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    --重置数据
+    generateAwardData(human, id)
+    actData.posData = nil
+    actData.isStart = 0
+
+    --通知客户端
+    local msgRet = Msg.gc.GC_DBQB_RESET
+    msgRet.isFreeReset = actData.isFreeReset or 0
+    msgRet.isStart = actData.isStart or 0
+
+    populateMsg(actData, msgRet.awardPoolData)
+    Msg.send(msgRet, human.fd)
+end
+
+--抽奖
+function Lottery(human, id, pos)
+    if not id or not pos then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    if 1 > pos or pos > (POOL1CNT + POOL2CNT + POOL3CNT + POOL4CNT) then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    local state = AbsActLogic.isStarted(human, id)
+    if not state then
+        return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
+    end
+
+    local actData = human.db.absAct[id]
+    if not actData then
+        return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
+    end
+
+    local posData = actData.posData
+    if posData and posData[pos] then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    local itemCnt = LOTTERYCOSTCNT
+    if not actData.dailyFreeState or actData.dailyFreeState == 1 then
+        itemCnt = 0
+        actData.dailyFreeState = 0
+    end
+
+    --扣消耗
+    if itemCnt > 0 then
+        if BagLogic.getItemCnt(human, COSTITEMID) < itemCnt then
+            return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
+        end
+        BagLogic.delItem(human, COSTITEMID, itemCnt, LOGTYPE)
+    end
+
+    --抽奖
+    local awardVec, totalWeight = generateLotteryData(actData)
+    if #awardVec <= 0 then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    local itemId, itemCnt, weight, poolType, awardIdx = 0,0,0,0,0
+    local randWeight = math.random(0, totalWeight)
+    for _,v in ipairs(awardVec) do
+        weight = weight + v[3]
+        if randWeight <= weight then
+            itemId = v[1]
+            itemCnt = v[2]
+            poolType = v[4]
+            awardIdx = v[5]
+            break
+        end
+    end
+    --BagLogic.addItem(human, itemId, itemCnt, LOGTYPE)
+    BagLogic.addItemList(human, { {itemId, itemCnt}}, LOGTYPE)
+
+    --更新db
+    actData.posData = actData.posData or {}
+    actData.posData[pos] = { poolType = poolType, idx = awardIdx }
+    actData.awardData[poolType].cnt = actData.awardData[poolType].cnt - 1
+    if poolType == 4 then   --抽到特殊奖励, 获得免费刷新奖池一次
+        actData.isFreeReset = 1
+    end
+
+    --通知客户端
+    local msgRet = Msg.gc.GC_DBQB_LOTTERY
+    msgRet.isFreeReset = actData.isFreeReset or 0
+    msgRet.isFree = 0 --有免费次数会优先使用免费次数, 所以抽奖后,免费次数就没有了
+
+    --populateMsg(actData, msgRet.awardPoolData)
+    local posInfo = msgRet.posInfo
+    posInfo.isGet = 1
+    posInfo.poolType = poolType
+    posInfo.index = pos
+    Grid.makeItem(posInfo.item, itemId, itemCnt)
+    Msg.send(msgRet, human.fd)
+
+    --红点刷新
+    if itemCnt == 0 then
+        local config = AbsActExcel.absActivity[id]
+        YunYingLogic.sendGroupUpdate(YYInfo[id], human, config.panelID)
+    end
+end
+
+--点击开始游戏
+function StartGame(human, id)
+    if not id then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    local state = AbsActLogic.isStarted(human, id)
+    if not state then
+        return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
+    end
+
+    local actData = human.db.absAct[id]
+    if not actData then
+        return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
+    end
+
+    --修改状态
+    actData.isStart = 1
+
+    --通知客户端
+    local msgRet = Msg.gc.GC_DBQB_START_GAME
+    msgRet.isStart = actData.isStart or 0
+    Msg.send(msgRet, human.fd)
+end
+
+--关闭提示
+function CloseTips(human, id)
+    if not id then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    local state = AbsActLogic.isStarted(human, id)
+    if not state then
+        return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
+    end
+
+    local actData = human.db.absAct[id]
+    if not actData then
+        return Broadcast.sendErr(human, Lang.YUNYING_ERR_TIME)
+    end
+
+    --修改状态
+    actData.isTips = 0
+
+    --通知客户端
+    local msgRet = Msg.gc.GC_DBQB_TIPS
+    msgRet.isTips = actData.isTips or 0
+    Msg.send(msgRet, human.fd)
+end

+ 18 - 0
script/module/absAct/Handler.lua

@@ -29,6 +29,7 @@ local FestivalSevenDayCardLogic = require("absAct.FestivalSevenDayCardLogic")
 local AbsSignGiftLogic = require("absAct.AbsSignGiftLogic")
 local NewHeroLogic = require("absAct.NewHeroLogic")
 local LotteryByDiamondLogic = require("absAct.LotteryByDiamondLogic")
+local DuoBaoQiBingLogic = require("absAct.DuoBaoQiBingLogic")
 
 function CG_ABS_ACT_DETAIL_QUERY(human, msg)
     AbsActLogic.actDetailQuery(human,msg.id)
@@ -242,4 +243,21 @@ end
 ------------------------古玉充能活动抽奖-----------------------
 function CG_LOTTERYBYDIAMONDS_LOTTERY(human, msg)
     LotteryByDiamondLogic.Lottery(human, msg.id, msg.type)
+end
+
+----------------------夺宝奇兵活动----------------------------
+function CG_DBQB_LOTTERY(human, msg)
+    DuoBaoQiBingLogic.Lottery(human, msg.id, msg.pos)
+end
+
+function CG_DBQB_RESET(human, msg)
+    DuoBaoQiBingLogic.ResetAwardPool(human, msg.id, msg.type)
+end
+
+function CG_DBQB_START_GAME(human, msg)
+    DuoBaoQiBingLogic.StartGame(human, msg.id)
+end
+
+function CG_DBQB_TIPS(human, msg)
+    DuoBaoQiBingLogic.CloseTips(human, msg.id)
 end

+ 1 - 1
script/module/absAct/LotteryByDiamondLogic.lua

@@ -4,7 +4,7 @@
     human.db.absAct[id] = {
         points = nil, --普通抽奖累积的积分
         speLotteryTimes = nil, --稀有抽奖次数
-        lastFreeTime = nil, --上一次免费抽奖时间,如果为nil或者为1则可以免费单抽一次
+        lastFreeTime = nil, --上一次免费抽奖时间,如果为nil或者与当前时间不是同一天则可以免费单抽一次
     }
 ]=]--
 

+ 67 - 1
script/module/absAct/Proto.lua

@@ -969,4 +969,70 @@ GC_LOTTERYBYDIAMONDS_LOTTERY = {
     {"points",                    1,  "int"},         -- 普通奖池累积积分
     {"lotteryTimes",              1,  "int"},         -- 稀有奖池可抽奖次数
     {"lottery1cost",              1,  ItemData},      -- 普通奖池抽奖一次消耗
-}
+}
+
+
+
+----------------------------夺宝奇兵--------------------------------------------
+AWARD_INFO = {
+    {"item",              1,  ItemData},        -- 道具数据
+    {"isGet",			  1,  "byte"},          -- 是否已经抽中, 0-未抽中, 1-已抽中
+    {"poolType",		  1,  "byte"},          -- 所属奖池,1-奖池1, 2-奖池2... 以此类推
+    {"index",		      1,  "byte"},          -- key
+}
+--查询返回协议
+GC_DBQB_QUERY = {
+    {"isFreeReset",             1,      "byte"},             -- 是否可以免费重置标识, 0-不可以,1-可以
+    {"isStart",                 1,      "byte"},             -- 是否开始游戏, 0-没有,1-已经开始
+    {"isTips",                 1,       "byte"},             -- 是否提示, 0-不提示,1-提示
+    {"isFree",                 1,       "byte"},             -- 是否免费, 0-不免费,1-免费
+    {"lotteryCost",             1,       ItemData},          -- 单抽消耗
+    {"resetCost",               1,       ItemData},          -- 重置消耗
+    {"awardPoolData",           45,      AWARD_INFO},        -- 奖池数据
+}
+
+--抽奖
+CG_DBQB_LOTTERY = {
+    {"id",			    1,  "int"},     -- 活动ID
+    {"pos",            1,  "byte"},    --位置
+}
+
+GC_DBQB_LOTTERY = {
+    {"isFreeReset",             1,      "byte"},             -- 是否可以免费重置标识, 0-不可以,1-可以
+    {"isFree",                 1,       "byte"},             -- 是否可以免费抽奖, 0-不免费,1-免费
+    {"posInfo",                 1,      AWARD_INFO},          -- 单个奖励数据
+}
+
+
+
+--重置奖池
+CG_DBQB_RESET = {
+    {"id",			    1,      "int"},         -- 活动ID
+    {"type",            1,      "byte"},        --重置类型, 1-免费重置, 2-消耗钻石重置
+}
+
+GC_DBQB_RESET = {
+    {"isFreeReset",             1,      "byte"},             -- 是否可以免费重置标识, 0-不可以,1-可以
+    {"isStart",                 1,      "byte"},             -- 是否开始游戏, 0-没有,1-已经开始
+    {"awardPoolData",           45,      AWARD_INFO},        -- 奖池数据
+}
+
+--点击开始游戏
+CG_DBQB_START_GAME = {
+    {"id",			    1,      "int"},         -- 活动ID
+}
+
+GC_DBQB_START_GAME = {
+    {"isStart",         1,      "byte"},        -- 是否开始游戏, 0-没有,1-已经开始
+}
+
+
+--提示
+CG_DBQB_TIPS = {
+    {"id",			    1,      "int"},         -- 活动ID
+}
+
+GC_DBQB_TIPS = {
+    {"isTips",                 1,       "byte"},             -- 是否提示, 0-不提示,1-提示
+}
+

+ 7 - 5
script/module/bag/BagLogic.lua

@@ -283,7 +283,7 @@ function sendChange(human, itemID, isAdd)
 	if isAdd == true then
 		msgRet.itemData[0] = 1
 		Grid.makeItem(msgRet.itemData[1], itemID, itemCnt, nil,nil,nil, Grid.getOpflagAtBag(itemID))
-	end	
+	end
 	Msg.send(msgRet, human.fd)
 end
 
@@ -317,12 +317,13 @@ function sendItemGetList1(human, list, logStr)
 	for i=1,len do
 		if cnt >= #msgRet.list then
 			break
-		 end
+		end
 		local itemID = list[i][1]
 		local itemCnt = list[i][2]
         if not ItemDefine.isEquip(itemID) then
-           cnt = cnt + 1
-		   Grid.makeItem(msgRet.list[cnt], itemID, itemCnt)
+        cnt = cnt + 1
+			--Grid.makeItem(msgRet.list[cnt], itemID, itemCnt)
+			Grid.makeItem(msgRet.list[cnt], itemID, itemCnt, nil,nil,nil, Grid.getOpflagAtBag(itemID))
         end
 	end
 
@@ -347,7 +348,8 @@ function sendItemGetList2(human, list, logStr)
 
         if not ItemDefine.isEquip(itemID) then
 			cnt = cnt + 1
-		   	Grid.makeItem(msgRet.list[cnt], itemID, itemCnt)
+			--Grid.makeItem(msgRet.list[cnt], itemID, itemCnt)
+			Grid.makeItem(msgRet.list[cnt], itemID, itemCnt, nil,nil,nil, Grid.getOpflagAtBag(itemID))
         end
 	end
 

+ 2 - 2
script/module/bag/Handler.lua

@@ -76,6 +76,6 @@ function CG_ITEM_GET_BY_ITEM_ID(human,msg)
    ItemLogic.sendItemData(human, msg.id)
 end
 
-function CG_SUIPIAN_SYNTHESIS(human)
-	SuipianLogic.CG_SUIPIAN_SYNTHESIS(human)
+function CG_SUIPIAN_SYNTHESIS(human, msg)
+	SuipianLogic.CG_SUIPIAN_SYNTHESIS(human, msg.type)
 end

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

@@ -265,6 +265,7 @@ GC_ITEM_BUY_DO = {
 
 --碎片一键合成
 CG_SUIPIAN_SYNTHESIS = {
+	{"type",	1,	"byte"},           -- 1-英雄, 2-装备, 3-皮肤, 4-秘宝
 }
 
 --碎片一键合成结果通知

+ 61 - 18
script/module/bag/SuipianLogic.lua

@@ -243,7 +243,8 @@ function makeResultItemData(net, id, cnt, isHero)
 		HeroGrid.makeHeroSimpleByID(net, id)
 		net.cnt = cnt
 	else
-		Grid.makeItem(net, id, cnt)
+		--Grid.makeItem(net, id, cnt)
+		Grid.makeItem(net, id, cnt, nil,nil,nil, Grid.getOpflagAtBag(id))
 	end
 end
 
@@ -621,10 +622,10 @@ function Suipan_BeginSyntheticFragments(human, nItemID, nItemNum, tMsgData)
 		return false
 	end
 
-	local leftHeroBox =  HeroLogic.getEmptyCnt(human)	
+	local leftHeroBox =  HeroLogic.getEmptyCnt(human)
     if itemConfig.get[2] ~= SUMMON_SUBTYPE_EQUIP then
-        if leftHeroBox <= 0 then
-           return false
+        if leftHeroBox <= 0 and itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN then
+        	return false
         end
     end
 
@@ -748,13 +749,13 @@ function Suipan_BeginSyntheticFragments(human, nItemID, nItemNum, tMsgData)
 		for k, v in pairs(outItemIDList) do
 			netList[0] = netList[0] + 1
 			makeResultItemData(netList[netList[0]], k, v, isHero)
-			print("[Suipan_BeginSyntheticFragments] 合成的数量 英雄ID k = "
+			print("[Suipan_BeginSyntheticFragments] 合成的数量 道具ID k = "
 					..k .. " v ="..v.." cnt = "..netList[netList[0]].cnt)
 		end
 	else
 		netList[0] = netList[0] + 1
 		makeResultItemData(netList[netList[0]], targetID, realItemCnt, isHero)
-		print("[Suipan_BeginSyntheticFragments] 合成的数量 英雄ID targetID = "
+		print("[Suipan_BeginSyntheticFragments] 合成的数量 道具ID targetID = "
 				..targetID .." realItemCnt = "..realItemCnt.. " cnt = "..netList[netList[0]].cnt)
 	end
 	if fenJieList then
@@ -770,15 +771,16 @@ function Suipan_BeginSyntheticFragments(human, nItemID, nItemNum, tMsgData)
 end
 
 -- 碎片合成
-function SUIPIAN_SYNTHESIS(human, tCompositeTable)
+function SUIPIAN_SYNTHESIS(human, tCompositeTable, isHaveHero)
 	if not human or nil == tCompositeTable or nil == _G.next(tCompositeTable) then
 		return false
 	end
 
 	-- 英雄背包空余格子数
 	local nLefeHeroNum =  HeroLogic.getEmptyCnt(human)
-	if 0 >= nLefeHeroNum then
+	if 0 >= nLefeHeroNum and isHaveHero then
 		Broadcast.sendErr(human, Lang.HERO_BAG_FULL)
+		print("[SUIPIAN_SYNTHESIS] 背包格子不够直接返回 nLefeHeroNum = "..nLefeHeroNum)
 		return false
 	end
 
@@ -821,14 +823,14 @@ function SUIPIAN_SYNTHESIS(human, tCompositeTable)
 	-- 正式开始正式生成
 	for nID, nNum in pairs(tCompositeTable) do
 		-- 不存在剩余空位
-		if 0 >= nLefeHeroNum then
+		if 0 >= nLefeHeroNum and isHaveHero then
 			break
 		end
 
 		local itemConfig = ItemExcel.item[nID]
 		if itemConfig then
 			local nCanCreateNum = math.floor(nNum / itemConfig.fullCnt)
-			if nCanCreateNum > nLefeHeroNum then
+			if nCanCreateNum > nLefeHeroNum and isHaveHero then
 				nCanCreateNum = nLefeHeroNum
 			end
 			
@@ -843,29 +845,70 @@ function SUIPIAN_SYNTHESIS(human, tCompositeTable)
 			print("[SUIPIAN_SYNTHESIS] 检测过居然还不存在对应物品的配置 nID = "..nID.." nNum = "..nNum)
 		end
 	end
-
 	Msg.send(msgRet, human.fd)
 end
 
-function CG_SUIPIAN_SYNTHESIS(human)
+
+
+function CG_SUIPIAN_SYNTHESIS(human, synthesisType)
+	if not synthesisType or synthesisType < SUMMON_SUBTYPE_HERO  or synthesisType > SUMMON_SUBTYPE_TALISAM then
+		print("[CG_SUIPIAN_SYNTHESIS] 合成类型错误 synthesisType = "..synthesisType)
+		return
+	end
+
+	--目前只有两种碎片能合成
+	if synthesisType ~= SUMMON_SUBTYPE_HERO and  synthesisType ~= SUMMON_SUBTYPE_TALISAM then
+		print("[CG_SUIPIAN_SYNTHESIS] 合成类型错误 synthesisType = "..synthesisType)
+		return
+	end
+
+
 	local msgRet = Msg.gc.GC_SUIPIAN_SYNTHESIS
 	local status = 1
+	local isHaveHero = false
 	local tCompositeTable = {}
+	-- for itemID,itemCnt in pairs(human.db.bag) do
+	-- 	local itemConfig = ItemExcel.item[itemID]
+	-- 	if itemConfig ~= nil and
+	-- 	   itemConfig.mainType == ItemDefine.MAINTYPE_ITEM and 
+	-- 	   (itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN or
+	-- 	   itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_TALISMAM) then
+	-- 	   if itemCnt >= itemConfig.fullCnt then
+	-- 			tCompositeTable[itemID] = tCompositeTable[itemID] or 0
+	-- 			tCompositeTable[itemID] = tCompositeTable[itemID] + itemCnt
+
+	-- 			if itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN then
+	-- 				isHaveHero = true
+	-- 			end
+	-- 	   end
+	-- 	end
+	-- end
+	--后续可以优化下,把值对应起来
+	local targetSubType = 0
+	if synthesisType == SUMMON_SUBTYPE_HERO then
+		targetSubType = ItemDefine.ITEM_SUBTYPE_SUIPIAN
+	elseif synthesisType == SUMMON_SUBTYPE_TALISAM then
+		targetSubType = ItemDefine.ITEM_SUBTYPE_SUIPIAN_TALISMAM
+	end
+
 	for itemID,itemCnt in pairs(human.db.bag) do
 		local itemConfig = ItemExcel.item[itemID]
-		if itemConfig ~= nil and 
-		   itemConfig.mainType == ItemDefine.MAINTYPE_ITEM and 
-		   itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN then
-		   if itemCnt >= itemConfig.fullCnt then
+		if itemConfig and itemConfig.mainType == ItemDefine.MAINTYPE_ITEM and itemCnt >= itemConfig.fullCnt then
+			if itemConfig.subType == targetSubType then
 				tCompositeTable[itemID] = tCompositeTable[itemID] or 0
 				tCompositeTable[itemID] = tCompositeTable[itemID] + itemCnt
-		   end
+
+				if synthesisType == SUMMON_SUBTYPE_HERO then
+					isHaveHero = true
+				end
+			end
 		end
 	end
 
+
 	if nil ~= _G.next(tCompositeTable) then
 		status = 0
-		SUIPIAN_SYNTHESIS(human, tCompositeTable)
+		SUIPIAN_SYNTHESIS(human, tCompositeTable, isHaveHero)
 	end
 
 	msgRet.status = status

+ 74 - 19
script/module/battle/BattleLogic.lua

@@ -713,9 +713,9 @@ local function BattleLogic_SetAddFreeMopupNum(human, nValue)
     print("[BattleLogic_SetAddFreeMopupNum] 消耗的额外次数 nValue = "..nValue)
     human.db.mopupAddFreeCnt = human.db.mopupAddFreeCnt + nValue
 
-    if 0 > human.db.mopupAddFreeCnt then
-        human.db.mopupAddFreeCnt = 0
-    end
+    -- if 0 > human.db.mopupAddFreeCnt then
+    --     human.db.mopupAddFreeCnt = 0
+    -- end
 end
 
 function getBattleRoleList(nBattleType, worldMapId)
@@ -1259,9 +1259,9 @@ function query(human)
         print("[query] 获取到的战斗ID或奖励配置不正确 id = "..human.db._id)
         return
     end
-
+    
     print("[BattleLogic query] nNowGuaJiID ="..nNowGuaJiID.." nNowBattleID ="..nNowBattleID)
-   
+    
     msgRet.nowBattleID = nNowBattleID
     local configNode = #tBattleConfig.node
     if nNowBattleID > configNode then
@@ -1269,7 +1269,7 @@ function query(human)
         nNowBattleID = configNode
         BattleLogic_SetBattleBattleID(human, nNowBattleID)
     end
-
+    
     if nNowGuaJiID > configNode then
         print("[query] 玩家的挂机ID不正确,进行纠正 nNowGuaJiID = "..nNowGuaJiID.." 最大挂机ID = "..configNode)
         nNowGuaJiID = configNode
@@ -1399,7 +1399,9 @@ function query(human)
     end
 
     -- 判断额外增加的扫荡次数
-    if 0 < BattleLogic_GetAddFreeMopupNum(human) and 0 == msgRet.canMopup then
+    --秘宝增加免费扫荡次数
+    local talismanAdd_dailyFeeCnt = TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_SD_FREE_CNT) or 0
+    if 0 < (BattleLogic_GetAddFreeMopupNum(human) + talismanAdd_dailyFeeCnt) and 0 == msgRet.canMopup then
         msgRet.canMopup = 1
     end
 
@@ -1743,7 +1745,7 @@ function calcBattleOut(human,isDiamond)
     calcBattleExpOut(human, now)
     
     calcBattleItemOut(human, now)
-
+    
     if isDiamond then  -- 钻石消耗 所有产出翻1.5倍
         local tBattleOut = BattleLogic_GetBattleOut(human)
         if not tBattleOut then
@@ -1876,7 +1878,11 @@ function calcBattleExpOut(human, now)
     local vipJinAdd =(VipLogic.getPowerArgs(human, VipLogic.VIP_POWER8) or 0) / 100
     local vipGreenExpAdd =(VipLogic.getPowerArgs(human, VipLogic.VIP_POWER9) or 0) / 100
     local vipQingbaoAdd =(VipLogic.getPowerArgs(human, VipLogic.VIP_POWER19) or 0) / 100
-    local talismanAdd = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_QB) or 0) / 100
+
+    --秘宝方面的加成
+    local talismanAdd_qb = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_QB) or 0) / 100
+    local talismanAdd_hero_exp = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_HERO_EXP) or 0) / 100
+
     local exp = nowNodeConfig.hangExp
     local jinbi = nowNodeConfig.hangJinbi
     local greenExp = nowNodeConfig.hangGreenExp
@@ -1885,7 +1891,9 @@ function calcBattleExpOut(human, now)
     tBattleOut.jinbi = tBattleOut.jinbi + math.floor(outCnt * jinbi *(1 + vipJinAdd))
     tBattleOut.greenExp = tBattleOut.greenExp + math.floor(outCnt * greenExp *(1 + vipGreenExpAdd))
     tBattleOut.qingbao = tBattleOut.qingbao + math.floor(outCnt * qingbao *(1 + vipQingbaoAdd))
-    tBattleOut.qingbao = tBattleOut.qingbao + math.ceil(tBattleOut.qingbao * talismanAdd)
+
+    tBattleOut.qingbao = tBattleOut.qingbao + math.ceil(tBattleOut.qingbao * talismanAdd_qb)
+    tBattleOut.greenExp = tBattleOut.greenExp + math.ceil(tBattleOut.greenExp * talismanAdd_hero_exp)
 end
 
 -- 根据时间计算道具产出
@@ -2028,7 +2036,8 @@ function calcBattleItemOut(human, now,isDiamond)
         tBattleOut.itemTs2 = now
     end
 
-    local talismanAdd = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_ZS) or 0) / 100
+    local talismanAdd_zs = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_ZS) or 0) / 100
+    
     local nodeConfig = tBattleNodeConfig.node[guajiID]
     local items = getItemOutsByTime(nodeConfig, sec)
     for itemID, itemCnt in pairs(items) do
@@ -2043,8 +2052,8 @@ function calcBattleItemOut(human, now,isDiamond)
         else
             tBattleOut.items = tBattleOut.items or { }
             tBattleOut.items[itemID] = tBattleOut.items[itemID] or 0
-            if itemID == ItemDefine.ITEM_ZUANSHI_ID and talismanAdd > 0 then
-                itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd)
+            if itemID == ItemDefine.ITEM_ZUANSHI_ID and talismanAdd_zs > 0 then
+                itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd_zs)
             end
             tBattleOut.items[itemID] = tBattleOut.items[itemID] + itemCnt
         end
@@ -2440,6 +2449,7 @@ function onFightEnd(human, result, fightTypeID, param1, combatInfo)
     if nextBattleID == 10 and EliteDefine.COPY_ELITE_NORMAL == nBattleType then
         human.db.combatSpeed = 2
     end
+
     combatInfo.attacker.oldLv = human.db.lv
     -- 给奖励
     combatInfo.rewardItem = { }
@@ -2460,7 +2470,7 @@ function onFightEnd(human, result, fightTypeID, param1, combatInfo)
     Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, human.db._id, human.db.account, human.db.name, human.db.battleID)
 
     if nBattleType ==  EliteDefine.COPY_ELITE_NORMAL then
-        
+
         RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1101)
         GuideLogic.onCallback(human)
         JibanLogic.onCallback(human, 1, battleID)
@@ -2606,6 +2616,8 @@ end
 function gmSetHangTime(human, hourVal)
     local tBattleOut = BattleLogic_GetBattleOut(human)
     if not tBattleOut then
+        Log.write(Log.LOGID_OSS_BATTLE_MAINGATE, "gmSetHangTime  func  calcBattleExpOut 获取挂机奖励列表失败 id = "
+                    ..human.db._id.. "account = "..human.db.account.." name = "..human.db.name)
         return
     end
 
@@ -2615,6 +2627,8 @@ function gmSetHangTime(human, hourVal)
 
     local setHandTime = hourVal * 3600
     local maxHangTime = getHangMaxTime(human)
+
+
     if setHandTime > maxHangTime then
         setHandTime = maxHangTime
     end
@@ -2646,6 +2660,7 @@ function mopupQuery(human)
     if guajiID == 0 then
         return Broadcast.sendErr(human, Lang.BATTLE_MOPUP_ERR)
     end
+
     human.db.mopupDoCnt = human.db.mopupDoCnt or 0
     local nextDoCnt = human.db.mopupDoCnt + 1
     nextDoCnt = nextDoCnt >= EliteDefine.BATTLE_MOPUP_MAX_LEN and EliteDefine.BATTLE_MOPUP_MAX_LEN or nextDoCnt
@@ -2655,6 +2670,12 @@ function mopupQuery(human)
     local dropConfig = DropExcel.dropBattle[dropID]
     local dropCnt = 0
 
+    --秘宝加成
+    local talismanAdd_qb = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_QB) or 0) / 100
+    local talismanAdd_hero_exp = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_HERO_EXP) or 0) / 100
+    local talismanAdd_zs = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_ZS) or 0) / 100
+    local talismanAdd_dailyFeeCnt = TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_SD_FREE_CNT) or 0
+
     -- ABS掉落活动显示到第一个
     dropCnt = DropExchangeLogic.getDropItemSaoQuery(human, msgRet, dropCnt)
     for i = 1, #dropConfig.dropRule do
@@ -2664,7 +2685,11 @@ function mopupQuery(human)
         dropCnt = dropCnt + 1
         local tempConfig = dropConfig.dropRule[i]
         local itemID = tempConfig[1]
-        Grid.makeItem(msgRet.item[dropCnt], itemID, 1)
+        local itemCnt = 1
+        if itemID == ItemDefine.ITEM_ZUANSHI_ID and talismanAdd_zs > 0 then
+            itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd_zs)
+        end
+        Grid.makeItem(msgRet.item[dropCnt], itemID, itemCnt)
     end
     for i = 1, #dropConfig.dropRule3 do
         if dropCnt >= #msgRet.item then
@@ -2673,7 +2698,11 @@ function mopupQuery(human)
         dropCnt = dropCnt + 1
         local tempConfig = dropConfig.dropRule3[i]
         local itemID = tempConfig[1]
-        Grid.makeItem(msgRet.item[dropCnt], itemID, 1)
+        local itemCnt = 1
+        if itemID == ItemDefine.ITEM_ZUANSHI_ID and talismanAdd_zs > 0 then
+            itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd_zs)
+        end
+        Grid.makeItem(msgRet.item[dropCnt], itemID, itemCnt)
     end
 
     -- local mapConfig = BattleExcel.map[nodeConfig.mapID]
@@ -2681,6 +2710,9 @@ function mopupQuery(human)
     msgRet.name = mapConfig.name
     msgRet.item[0] = dropCnt
     local nNowAddFreeCnt = BattleLogic_GetAddFreeMopupNum(human)
+    nNowAddFreeCnt = nNowAddFreeCnt + talismanAdd_dailyFeeCnt
+
+
     if TequanShopLogic.isActiveMopup(human) then
         msgRet.leftCnt = BATTLE_MOPUP_CNT_VIP - human.db.mopupDoCnt
     else
@@ -2692,6 +2724,7 @@ function mopupQuery(human)
 
     -- 增加额外次数
     msgRet.leftCnt = msgRet.leftCnt + nNowAddFreeCnt
+    msgRet.leftCnt = math.max(msgRet.leftCnt, 0)
     
     -- local mupopExcel = BattleExcel.mupop[nextDoCnt]
     local mupopExcel = tBattleConfig.mupop[nextDoCnt]
@@ -2720,8 +2753,12 @@ function mopupQuery(human)
     msgRet.nowCnt = human.db.mopupDoCnt
     msgRet.exp = nodeConfig.hangExp
     msgRet.jinbi = nodeConfig.hangJinbi
-    msgRet.greenExp = nodeConfig.hangGreenExp
-    msgRet.qingbao = nodeConfig.hangQingbao
+    --msgRet.greenExp = nodeConfig.hangGreenExp
+
+    msgRet.greenExp = nodeConfig.hangGreenExp + math.ceil(nodeConfig.hangGreenExp * talismanAdd_hero_exp)
+    msgRet.qingbao = nodeConfig.hangQingbao + math.ceil(nodeConfig.hangQingbao * talismanAdd_qb)
+    
+    print("[mopupQuery] nowCnt = "..msgRet.nowCnt.." leftCnt = "..msgRet.leftCnt.." nNowAddFreeCnt = "..nNowAddFreeCnt)
     Msg.send(msgRet, human.fd)
 end
 
@@ -2744,7 +2781,10 @@ function mopupFight(human)
     nextDoCnt = nextDoCnt >= EliteDefine.BATTLE_MOPUP_MAX_LEN and EliteDefine.BATTLE_MOPUP_MAX_LEN or nextDoCnt
     -- local mupopExcel = BattleExcel.mupop[nextDoCnt]
     local mupopExcel = tBattleConfig.mupop[nextDoCnt]
+
+    local talismanAdd_dailyFeeCnt = TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_SD_FREE_CNT) or 0
     local nNowAddFreeCnt = BattleLogic_GetAddFreeMopupNum(human)
+    nNowAddFreeCnt = nNowAddFreeCnt + talismanAdd_dailyFeeCnt
 
     if not mupopExcel then
         return Broadcast.sendErr(human, Lang.BATTLE_MOPUP_CNT_OVER)
@@ -2806,6 +2846,12 @@ function mopupFight(human)
     local vipJinAdd =(VipLogic.getPowerArgs(human, VipLogic.VIP_POWER8) or 0) / 100
     local vipGreenExpAdd =(VipLogic.getPowerArgs(human, VipLogic.VIP_POWER9) or 0) / 100
     local vipQingbaoAdd =(VipLogic.getPowerArgs(human, VipLogic.VIP_POWER19) or 0) / 100
+
+    --秘宝加成
+    local talismanAdd_qb = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_QB) or 0) / 100
+    local talismanAdd_hero_exp = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_HERO_EXP) or 0) / 100
+    local talismanAdd_zs = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_ZS) or 0) / 100
+
     local exp = config.hangExp * 120
     local jinbi = config.hangJinbi * 120
     local greenExp = config.hangGreenExp * 120
@@ -2814,6 +2860,10 @@ function mopupFight(human)
     local addJinbi = math.floor(jinbi *(1 + vipJinAdd))
     local addGreenExp = math.floor(greenExp *(1 + vipGreenExpAdd))
     local addQingbao = math.floor(qingbao *(1 + vipQingbaoAdd))
+
+    addQingbao = addQingbao + math.ceil(addQingbao * talismanAdd_qb)
+    addGreenExp = addGreenExp + math.ceil(addGreenExp * talismanAdd_hero_exp)
+
     local time = 7200
     local itemTable = getItemOutsByTime(config, time)
     -- 掉落活动
@@ -2841,6 +2891,11 @@ function mopupFight(human)
     local rewardCnt = double and 2 or 1
     for itemID, itemCnt in pairs(itemTable) do
         itemCnt = itemCnt * rewardCnt
+        
+        if itemID == ItemDefine.ITEM_ZUANSHI_ID and talismanAdd_zs > 0 then
+            itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd_zs)
+        end
+
         if not ItemDefine.isEquip(itemID) then
             msgRet.item[0] = msgRet.item[0] + 1
             Grid.makeItem(msgRet.item[msgRet.item[0]], itemID, itemCnt)
@@ -3420,7 +3475,6 @@ local function BattleLogic_GetNorewardReceived(human, nBattleType, cIndex)
             end
 
             if not (state == true) then
-            
                 local r = STATUS_CANGET 
                 --(k > nGuaJiID) and STATUS_CANGET or STATUS_NONE
                 --未领取
@@ -3542,6 +3596,7 @@ function CG_BATTLE_TONGGUAN_REWARD_GET_COPY(human, nBattleType)
     if not tBattleConfig or -1 >= nGuaJiID or -1 >= nBattleID then
         return
     end
+    
     local tMsgRet = Msg.gc.GC_BATTLE_TONGGUAN_REWARD_GET_COPY
     local nAdopt = BattleLogic_GetBattleAdopt(human, nBattleType)
     local nChoseLen = nBattleID - 1

+ 17 - 8
script/module/copy/CopyLogic.lua

@@ -131,7 +131,8 @@ function challengeQuery(human, copyType)
 	msgRet.nextRefreshTime = 24 * 60 * 60 - (now - ts1)
 	
 	--秘宝加成
-	local talismanAdd = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.NW_JB) or 0) / 100
+	local talismanAdd_jinbi = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.NW_JB) or 0) / 100
+	local talismanAdd_hero_exp = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.NW_HERO_EXP) or 0) / 100
 
 	local j = 0  -- 存储相同副本类型的数量
 	for i=1, #CopyExcel.copy do
@@ -147,8 +148,10 @@ function challengeQuery(human, copyType)
 			for key,value in ipairs (copyConfig.reward) do
 				local itemID = value[1]
 				local itemCnt = value[2]
-				if itemID == ItemDefine.ITEM_JINBI_ID and talismanAdd > 0 then
-					itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd)
+				if itemID == ItemDefine.ITEM_JINBI_ID and talismanAdd_jinbi > 0 then
+					itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd_jinbi)
+				elseif itemID == ItemDefine.ITEM_GREEN_EXP_ID and talismanAdd_hero_exp > 0 then
+					itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd_hero_exp)
 				end
 				Grid.makeItem(msgRet.list[j].reward[key], itemID, itemCnt)
 			end
@@ -218,18 +221,24 @@ function doFightEnd(human,copyID,combatInfo, touch)
 
     local double = RoleSystemLogic.isDouble(human,  RoleSystemDefine.ROLE_SYS_ID_1206)
 
+
+	--秘宝加成
+	local talismanAdd_jinbi = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.NW_JB) or 0) / 100
+	local talismanAdd_hero_exp = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.NW_HERO_EXP) or 0) / 100
+
+
 	-- 给奖励
 	local rewardRate = double and 2 or 1
-	--秘宝加成
-	local talismanAdd = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.NW_JB) or 0) / 100
 
 	local itemList = {}
 	for i = 1, #copyConfig.reward do
 		local itemID = copyConfig.reward[i][1]
 		local itemCnt = copyConfig.reward[i][2]
 		local finalCnt = itemCnt * rewardRate * fightCnt
-		if itemID == ItemDefine.ITEM_JINBI_ID and talismanAdd > 0 then
-			finalCnt = finalCnt + math.ceil(finalCnt * talismanAdd)
+		if itemID == ItemDefine.ITEM_JINBI_ID and talismanAdd_jinbi > 0 then
+			finalCnt = finalCnt + math.ceil(finalCnt * talismanAdd_jinbi)
+		elseif itemID == ItemDefine.ITEM_GREEN_EXP_ID and talismanAdd_hero_exp > 0 then
+			finalCnt = finalCnt + math.ceil(finalCnt * talismanAdd_hero_exp)
 		end
 		BagLogic.addItem(human, itemID, finalCnt, "copy_win")
 		local index = #itemList+1
@@ -242,7 +251,7 @@ function doFightEnd(human,copyID,combatInfo, touch)
 				local nowTotalCnt = #combatInfo.rewardItem
 				combatInfo.rewardItem[nowTotalCnt + 1] = {}
 				combatInfo.rewardItem[nowTotalCnt + 1][1] = itemID
-				if itemID == ItemDefine.ITEM_JINBI_ID and talismanAdd > 0 then
+				if itemID == ItemDefine.ITEM_JINBI_ID or itemID == ItemDefine.ITEM_GREEN_EXP_ID then
 					combatInfo.rewardItem[nowTotalCnt + 1][2] = finalCnt
 				else
 					combatInfo.rewardItem[nowTotalCnt + 1][2] = itemCnt * rewardRate * fightCnt

+ 67 - 10
script/module/drill/DrillLogic.lua

@@ -70,6 +70,7 @@ local HeroLogLogic = require("absAct.HeroLogLogic")
 local HeroGrowUp = require("absAct.HeroGrowUp")
 local MengxinLogic = require("present.MengxinLogic")
 local YunYingLogic = require("yunying.YunYingLogic")
+local TalismanLogic = require("talisman.TalismanLogic")
 
 local queryFields = {["uuid"] = 1}
 local queryFieldsList = {}
@@ -289,6 +290,9 @@ function checkSaoDang(human, diff, lastDiff, lastId)
     local double = RoleSystemLogic.isDouble(human, RoleSystemDefine.ROLE_SYS_ID_1204)
     local rewardCnt = double and 2 or 1
 
+	--秘宝加成
+	local talismanAdd_jinbi = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.DRILL_JINBI) or 0) / 100
+
 	if lastDiff and lastDiff == diff and lastId > 10 then
 		id = lastId - 10 
 		for i = 1 , id do
@@ -296,7 +300,10 @@ function checkSaoDang(human, diff, lastDiff, lastId)
 			-- 关卡奖励		
 			for _, item in ipairs(drillItems) do
 				local itemID = item[1]
-				local itemCnt = item[2] * rewardCnt			
+				local itemCnt = item[2] * rewardCnt
+				if itemID == ItemDefine.ITEM_JINBI_ID then
+					itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd_jinbi)
+				end
 				drillDB.dayGet = drillDB.dayGet or {}
 				drillDB.dayGet[itemID] = (drillDB.dayGet[itemID] or 0) + itemCnt
 				BagLogic.addItem(human, itemID, itemCnt, "drill")
@@ -408,7 +415,7 @@ function queryDrillId(human, drillData)
 		return diffChoseQuery(human)   -- quest(human)
 	end
 
-	local drill = human.db.drill 
+	local drill = human.db.drill
 	local diff = drill.diff
 	if not drill.diff  or drill.diff == 0 then
 		diff = drillData.diff		 
@@ -428,6 +435,9 @@ function queryDrillId(human, drillData)
 	Grid.makeItem(msgRet.dayGet[1], ItemDefine.ITEM_JINBI_ID,  dayJinbi )
 	Grid.makeItem(msgRet.dayGet[2], ItemDefine.ITEM_DRILL_COIN_ID,  dayCoin )
 
+	--秘宝加成
+	local talismanAdd_jinbi = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.DRILL_JINBI) or 0) / 100
+
 	msgRet.box[0] = #DrillExcel.box
 	for k, config  in ipairs(DrillExcel.box) do
 		local net = msgRet.box[k]	
@@ -436,9 +446,16 @@ function queryDrillId(human, drillData)
 		net.state = getBoxState(drill,  k)
 		local itemID1  = config["items"..diff][1][1]
 		local itemCnt1 = config["items"..diff][1][2]
+		if itemID1 == ItemDefine.ITEM_JINBI_ID and talismanAdd_jinbi > 0 then
+			itemCnt1 = itemCnt1 + math.ceil(itemCnt1 * talismanAdd_jinbi)
+		end
 
 		local itemID2  = config["items"..diff][2][1]
 		local itemCnt2 = config["items"..diff][2][2]
+		if itemID2 == ItemDefine.ITEM_JINBI_ID and talismanAdd_jinbi > 0 then
+			itemCnt2 = itemCnt1 + math.ceil(itemCnt2 * talismanAdd_jinbi)
+		end
+
 		Grid.makeItem(net.reward[1], itemID1,  itemCnt1 )
 		Grid.makeItem(net.reward[2], itemID2,  itemCnt2 )
 		net.reward[0] = 2
@@ -446,6 +463,10 @@ function queryDrillId(human, drillData)
 		if config["items"..diff][3] then
 			local itemID3  = config["items"..diff][3][1]
 			local itemCnt3 = config["items"..diff][3][2]
+			if itemID3 == ItemDefine.ITEM_JINBI_ID and talismanAdd_jinbi > 0 then
+				itemCnt3 = itemCnt1 + math.ceil(itemCnt3 * talismanAdd_jinbi)
+			end
+
 			Grid.makeItem(net.reward[3], itemID3,  itemCnt3 )
 			net.reward[0] = 3
 		end
@@ -490,8 +511,11 @@ function query(human, drillId)
 		return 
 	end
 
+	--秘宝加成
+	local talismanAdd_jinbi = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.DRILL_JINBI) or 0) / 100
+
 	local double = RoleSystemLogic.isDouble(human, RoleSystemDefine.ROLE_SYS_ID_1204)
-	local rewardCnt = double and 2 or 1 
+	local rewardCnt = double and 2 or 1
 	--require("common.Util").printTable(drillObj)
 	local nowId = drillData.drillId
 	local msgRet = Msg.gc.GC_DRILL_INFO
@@ -506,11 +530,18 @@ function query(human, drillId)
 	elseif drill.diff == DIFF_INCUBI then
 		itemConfig = drillCfg.items3
 	end
+
 	for _, item in pairs(itemConfig) do
 		msgRet.reward[0] = msgRet.reward[0] + 1
-		Grid.makeItem(msgRet.reward[msgRet.reward[0]], item[1], item[2] * rewardCnt)
+		local itemCnt = item[2] * rewardCnt
+		if item[1] == ItemDefine.ITEM_JINBI_ID then
+			itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd_jinbi)
+		end
+		Grid.makeItem(msgRet.reward[msgRet.reward[0]], item[1], itemCnt)
+		--Grid.makeItem(msgRet.reward[msgRet.reward[0]], item[1], item[2] * rewardCnt)
 	end
-	msgRet.defence[0] = 0	
+
+	msgRet.defence[0] = 0
 	for i = 1, CombatDefine.COMBAT_HERO_CNT do
 		local obj = drillObj.heroList[i]	
         if obj then
@@ -525,7 +556,6 @@ function query(human, drillId)
 			else
 				HeroGrid.makeHeroSimpleByID(msgRet.defence[msgRet.defence[0]], obj.id, i, others)
 			end
-           
         end
 	end
 
@@ -646,7 +676,20 @@ function drillBoxGet(human, index)
 		itemConfig = config.items3
 	end
 
-	BagLogic.addItemList(human, itemConfig, "drill")  
+	--秘宝加成
+	local talismanAdd_jinbi = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.DRILL_JINBI) or 0) / 100
+	local awardVec = {}
+	for i, v in ipairs(itemConfig) do
+		local itemID = v[1]
+		local itemCnt = v[2]
+		if itemID == ItemDefine.ITEM_JINBI_ID and talismanAdd_jinbi > 0 then
+			itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd_jinbi)
+		end
+		awardVec[i]= {itemID, itemCnt}
+	end
+
+	--BagLogic.addItemList(human, itemConfig, "drill")
+	BagLogic.addItemList(human, awardVec, "drill")
 
 	RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1204)
     RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_1201)
@@ -659,6 +702,10 @@ function rewardPreview(human)
 
     local msgRet = Msg.gc.GC_DRILL_REWARD_PREVIEW
     msgRet.list[0] = 0
+
+	--秘宝加成
+	local talismanAdd_jinbi = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.DRILL_JINBI) or 0) / 100
+
     for drillId, cf in pairs(DrillExcel.drill) do 
     	msgRet.list[0] = msgRet.list[0] + 1
     	local net = msgRet.list[msgRet.list[0]]
@@ -666,7 +713,10 @@ function rewardPreview(human)
 		net.items[0] = #cf.items
 		for i, item in ipairs(cf.items) do
 		    local itemID = item[1]
-		    local itemCnt = item[2] 		
+		    local itemCnt = item[2]
+			if itemID == ItemDefine.ITEM_JINBI_ID and talismanAdd_jinbi > 0 then
+				itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd_jinbi)
+			end
 	        Grid.makeItem(net.items[i], itemID, itemCnt)
 		end
 	end
@@ -1440,15 +1490,22 @@ function onFightEnd(human, result, combatType, cbParam, combatInfo)
 			return
 		end
 	end
-	local drillItems = getDrillItems(cbParam.drillId, diff) 	
+	local drillItems = getDrillItems(cbParam.drillId, diff)	
 	local double = RoleSystemLogic.isDouble(human, RoleSystemDefine.ROLE_SYS_ID_1204)
 	local rewardCnt = double and 2 or 1
 	combatInfo.double = double and 2 or 0
+
+	--秘宝加成
+	local talismanAdd_jinbi = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.DRILL_JINBI) or 0) / 100
+
 	-- 关卡奖励		
 	local itemList = {}
 	for k, item in ipairs(drillItems) do
 		local itemID = item[1]
-		local itemCnt = item[2] * rewardCnt		
+		local itemCnt = item[2] * rewardCnt
+		if itemID == ItemDefine.ITEM_JINBI_ID and talismanAdd_jinbi > 0 then
+			itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd_jinbi)
+		end
 		itemList[k] = {}
 		itemList[k][1] =  itemID
 		itemList[k][2] = itemCnt

+ 105 - 60
script/module/racialTrial/RacialTrialLogic.lua

@@ -21,19 +21,21 @@ local CombatDefine = require("combat.CombatDefine")
 local CombatLogic = require("combat.CombatLogic")
 local HeroLogic = require("hero.HeroLogic")
 local HeroConfig = require("excel.hero")
-local MonsterCfg = require("excel.monster")
 local Grid = require("bag.Grid")
 local MonsterGrid = require("monster.MonsterGrid")
+local Lang = require("common.Lang")
+local Broadcast = require("broadcast.Broadcast")
+local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
 
 --开启玩法的等级要求
 local openCondLevel =  0
 --每日最多可领奖次数
 local dailyAwardTimes = 0
 --种族试炼关卡数据,key为种族,value为该种族的关卡配置
-local racialCfg = {
-    --[camp] = {},
-    --[camp] = {},
-}
+-- local racialCfg = {
+--     --[camp] = {},
+--     --[camp] = {},
+-- }
 
 --日志Tag
 local RACIALTRIALLOG = "racialTrial"
@@ -67,30 +69,65 @@ local function updateCondValue()
 end
 
 --生成配置
-local function generateCfg()
-    local cfg = require("excel.shilianTower")
-    if not cfg then
-        return
+-- local function generateCfg()
+--     local cfg = require("excel.shilianTower")
+--     if not cfg then
+--         return
+--     end
+
+--     local stageCfg = cfg.shilianTower
+--     racialCfg = { [1] = {}, [2] = {}, [3] = {}, [4] = {}}
+--     local n1,n2,n3,n4 = 0,0,0,0
+--     for _, v in ipairs(stageCfg) do
+--         if v.raceID == 101 then
+--             n1 = n1 + 1
+--             racialCfg[1][n1] = v
+--         elseif v.raceID == 102 then
+--             n2 = n2 + 1
+--             racialCfg[2][n2] = v
+--         elseif v.raceID == 103 then
+--             n3 = n3 + 1
+--             racialCfg[3][n3] = v
+--         elseif v.raceID == 104 then
+--             n4 = n4 + 1
+--             racialCfg[4][n4] = v
+--         end
+--     end
+-- end
+
+--通过种族类型获取配置
+local function getCfgByCamp(human, camp)
+    local cfgVec = require("excel.shilianTower").shilianTower
+    if not cfgVec then
+        return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
+    end
+
+    local config = {}
+    local targetId = 0
+    if camp == 1 then
+        targetId = 101
+    elseif camp == 2 then
+        targetId = 102
+    elseif camp == 3 then
+        targetId = 103
+    elseif camp == 4 then
+        targetId = 104
+    else
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
     end
-
-    local stageCfg = cfg.shilianTower
-    racialCfg = { [1] = {}, [2] = {}, [3] = {}, [4] = {}}
-    local n1,n2,n3,n4 = 0,0,0,0
-    for _, v in ipairs(stageCfg) do
-        if v.raceID == 101 then
-            n1 = n1 + 1
-            racialCfg[1][n1] = v
-        elseif v.raceID == 102 then
-            n2 = n2 + 1
-            racialCfg[2][n2] = v
-        elseif v.raceID == 103 then
-            n3 = n3 + 1
-            racialCfg[3][n3] = v
-        elseif v.raceID == 104 then
-            n4 = n4 + 1
-            racialCfg[4][n4] = v
+    
+    local len = #config
+    for _, v in ipairs(cfgVec) do
+        if v.raceID == targetId then
+            len = len + 1
+            config[len] = v
         end
     end
+
+    if len == 0 then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+    return config
 end
 
 --初始化数据
@@ -181,7 +218,8 @@ function isDot(human,config)
         if human.db.RacialTrial then
             local num = 0
             for camp, v in pairs(human.db.RacialTrial) do
-                local campCfg = racialCfg[camp]
+                --local campCfg = racialCfg[camp]
+                local campCfg = getCfgByCamp(human, camp)
                 if v.dailyAwardCnt <= 0 or v.lv >= #campCfg then
                     num = num + 1
                 end
@@ -222,8 +260,8 @@ function isDot(human,config)
         if human.db.RacialTrial and human.db.RacialTrial[camp] then
             local dailyAwardCnt = human.db.RacialTrial[camp].dailyAwardCnt
             local lv = human.db.RacialTrial[camp].lv
-            local campCfg = racialCfg[camp]
-    
+            --local campCfg = racialCfg[camp]
+            local campCfg = getCfgByCamp(human, camp)
             if dailyAwardCnt <= 0 or lv >= #campCfg then
                 return false
             end
@@ -240,9 +278,9 @@ function updateDaily(human)
         return
     end
 
-    if not next(racialCfg) then
-        generateCfg()
-    end
+    -- if not next(racialCfg) then
+    --     generateCfg()
+    -- end
 
     --重置每日领奖次数/每日通关次数
     if human.db and human.db.RacialTrial then
@@ -254,24 +292,25 @@ end
 
 function onLogin(human)
     updateCondValue()
-    if human.db.lv < openCondLevel then
-        return
-    end
+    -- if human.db.lv < openCondLevel then
+    --     return
+    -- end
 
-    if not next(racialCfg) then
-        generateCfg()
-    end
+    -- if not next(racialCfg) then
+    --     generateCfg()
+    -- end
 end
 
 --GM 修改某个种族的关卡, levelCnt表示要往前/后打多少关,但是不增加每日领奖次数
 function GmSetlevel(human, camp, levelCnt)
     if not camp or not levelCnt then
-        return
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
     end
 
-    local singleRacialCfg = racialCfg[camp]
+    local singleRacialCfg = getCfgByCamp(human, camp)
+    --local singleRacialCfg = racialCfg[camp]
     if not singleRacialCfg then
-        return
+        return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
     end
 
     if not human.db.RacialTrial or not human.db.RacialTrial[camp] then
@@ -298,11 +337,11 @@ end
 --GM 开启某个种族的试炼
 function GmOpenTrial(human, camp)
     if not camp then
-        return
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
     end
     local wdDays = RACIAL_OPENTIME[camp]
     if not wdDays then
-        return
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
     end
 
     local wday = Util.getWeekDay()
@@ -317,7 +356,7 @@ end
 --增加某个种族试炼关卡的每次奖励次数/通关数
 function GmAddDailyAwardCnt(human, camp, num)
     if not camp or not num then
-        return
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
     end
 
     if not human.db.RacialTrial or not human.db.RacialTrial[camp] then
@@ -340,7 +379,7 @@ function getCombatMonsterOutID(human, side, args, combatType)
         camp = camp[1]
     end
     if not camp then
-        return
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
     end
 
     local nowLelvel = 0
@@ -348,9 +387,12 @@ function getCombatMonsterOutID(human, side, args, combatType)
         nowLelvel =  human.db.RacialTrial[camp].lv
     end
 
-    local config = racialCfg[camp][nowLelvel+1]
+    local configVec = getCfgByCamp(human, camp)
+    local config = configVec[nowLelvel+1]
+    --local config = racialCfg[camp][nowLelvel+1]
+
     if not config then
-        return
+        return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
     end
     return config.monsterOutID, config.zhandouli
 end
@@ -361,7 +403,7 @@ function fight(human, args, combatType)
         camp = camp[1]
     end
     if not camp then
-        return
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
     end
 
     if human.db.RacialTrial and human.db.RacialTrial[camp] then
@@ -373,9 +415,10 @@ function fight(human, args, combatType)
         end
 
         --已经到最高层
-        local campCfg = racialCfg[camp]
+        --local campCfg = racialCfg[camp]
+        local campCfg = getCfgByCamp(human, camp)
         if data.lv and data.lv >= #campCfg then
-            return
+            return Broadcast.sendErr(human, Lang.COMMON_MAXLEVEL)
         end
     end
 
@@ -394,7 +437,7 @@ function onFightEnd(human, result, combatType, param1, combatInfo)
         camp = camp[1]
     end
     if not camp then
-        return
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
     end
 
     if not human.db.RacialTrial or not human.db.RacialTrial[camp] then
@@ -407,10 +450,11 @@ function onFightEnd(human, result, combatType, param1, combatInfo)
     data.lv = data.lv + 1
     data.dailyAwardCnt =  data.dailyAwardCnt - 1
 
-    local singleRacialCfg = racialCfg[camp]
+    --local singleRacialCfg = racialCfg[camp]
+    local singleRacialCfg = getCfgByCamp(human, camp)
     local rewardCfg = singleRacialCfg[data.lv].reward
     if not rewardCfg then
-        return
+        return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
     end
 
     --已经到最高层或者当日可挑战次数已用完则不能继续挑战
@@ -435,7 +479,7 @@ end
 --入口查询
 function entranceQuery(human)
     if human.db.lv < openCondLevel then
-        return
+        return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
     end
 
     local wday = Util.getWeekDay()
@@ -472,11 +516,11 @@ end
 --单个种族关卡数据查询
 function stageQuery(human, camp_m)
     if not camp_m then
-        return
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
     end
 
     if human.db.lv < openCondLevel then
-        return
+        return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
     end
 
     local nowLv = 0
@@ -499,8 +543,9 @@ function stageQuery(human, camp_m)
         endIdx = startIdx + 5
     end
 
-    local singleRecailCfg = racialCfg[camp_m]
-    local levelMaxCnt = #singleRecailCfg
+    --local singleRecailCfg = racialCfg[camp_m]
+    local singleRacialCfg = getCfgByCamp(human, camp_m)
+    local levelMaxCnt = #singleRacialCfg
 
     --已经打到最高层的处理
     if nowLv >= levelMaxCnt then
@@ -514,12 +559,12 @@ function stageQuery(human, camp_m)
         startIdx = startIdx - subLevel + 1
         endIdx = levelMaxCnt
     end
-    
+
     local stageData = msgRet.data.stageData
     stageData[0] = 0
     local cnt = 0
     for i = startIdx, endIdx do
-        local singleCfg = singleRecailCfg[i]
+        local singleCfg = singleRacialCfg[i]
         if not singleCfg then
             return
         end

+ 8 - 0
script/module/roleSystem/RoleSystemDefine.lua

@@ -50,6 +50,14 @@ ROLE_SYS_ID_1206 = 1206 -- 冒险-黄金圣树
 ROLE_SYS_ID_1207 = 1207 -- 冒险-遗迹探险
 ROLE_SYS_ID_1208 = 1208 -- 冒险-失落神庙
 ROLE_SYS_ID_1209 = 1209 -- 冒险-冰龙巢穴
+
+ROLE_SYS_ID_1210 = 1210 -- 种族试炼-入口
+ROLE_SYS_ID_1211 = 1211 -- 种族试炼-妖族试炼
+ROLE_SYS_ID_1212 = 1212 -- 种族试炼-人族试炼
+ROLE_SYS_ID_1213 = 1213 -- 种族试炼-兽族试炼
+ROLE_SYS_ID_1214 = 1214 -- 种族试炼-仙/魔族试炼
+
+
 ROLE_SYS_ID_1300 = 1300 -- 主界面竞技
 ROLE_SYS_ID_1301 = 1301 -- 竞技-冠军联赛
 ROLE_SYS_ID_1302 = 1302 -- 竞技-王者争霸

+ 8 - 4
script/module/talisman/TalismanLogic.lua

@@ -27,10 +27,14 @@ local COND_TOWER_LEVEL = 100 --开启本系统需要通关恶魔之塔的层数
 
 --秘宝对挂机钻石/情报等其他方面加成标识
 OTHER_EFFECT_TBL = {
-    ["GJ_QB"] = "GJ_QB",            --挂机情报类型
-    ["GJ_ZS"] = "GJ_ZS",            --挂机钻石类型
-    ["DJ"] = "DJ",                  --点金
-    ["NW_JB"] = "NW_JB",            --女巫森林金币类型
+    ["GJ_QB"] = "GJ_QB",                            --挂机情报类型
+    ["GJ_ZS"] = "GJ_ZS",                            --挂机钻石类型
+    ["GJ_HERO_EXP"] = "GJ_HERO_EXP",                --挂机英雄经验类型
+    ["GJ_SD_FREE_CNT"] = "GJ_SD_FREE_CNT",          --每日扫荡次数类型
+    ["DJ"] = "DJ",                                  --点金
+    ["NW_JB"] = "NW_JB",                            --女巫森林金币类型
+    ["NW_HERO_EXP"] = "NW_HERO_EXP",                --女巫森林英雄经验类型
+    ["DRILL_JINBI"] = "DRILL_JINBI",                --勇者试炼金币类型
 }
 
 --是否开启本系统