فهرست منبع

增加秘宝系统,增加背包秘宝分页, 增加秘宝碎片合成功能

gitxsm 1 سال پیش
والد
کامیت
f5c8538718

+ 11 - 0
script/common/Lang.lua

@@ -33,6 +33,17 @@ CHARGE_CLOSE_TIP = [[不支持充值]]
 
 COMMON_LIBAO_HADBUY = [[已购买]]
 
+-------------------一些通用错误提示--------------------
+COMMOM_NOT_ENABLED = [[功能未开启]]
+COMMON_ARGUMENT_ERROR = [[参数错误]]
+COMMON_COMFIG_ERROR = [[配置错误]]
+COMMON_MAXLEVEL = [[已达到最高等级]]
+COMMON_ITEM_NOT_ENOUGH = [[道具不足]]
+COMMON_TYPE_ERROR = [[类型错误]]
+
+--------------------------------------------------
+
+
 CREATE_ROLE_FAIL_NAME_LEN1 = [[角色名字过短]]
 CREATE_ROLE_FAIL_NAME_LEN2 = [[角色名字过长]]
 CREATE_ROLE_FAIL_NAME_FILTER = [[角色名含有非法字符]]

+ 1 - 0
script/common/LogDefine.lua

@@ -261,6 +261,7 @@ DEFINE = {
 	realmUpgrade			= 751,			 --境界提升
 	racialTrial				= 752,			-- 种族挑战
 	lotteryByDiamonds		= 753,			--古玉充能
+	talisman				= 754,			--秘宝
 }
 
 

+ 4 - 0
script/common/ProtoID.lua

@@ -1304,3 +1304,7 @@ _ENV[1328]="GC_RACIALTRIAL_LEVEL_QUERY"
 _ENV[1335]="GC_LOTTERYBYDIAMONDS_QUERY"
 _ENV[1336]="CG_LOTTERYBYDIAMONDS_LOTTERY"
 _ENV[1337]="GC_LOTTERYBYDIAMONDS_LOTTERY"
+_ENV[1338]="CG_TALISMAN_QUERY"
+_ENV[1339]="GC_TALISMAN_QUERY"
+_ENV[1340]="CG_TALISMAN_UPGRADE"
+_ENV[1341]="GC_TALISMAN_UPGRADE"

+ 1 - 0
script/core/ObjHuman.lua

@@ -700,6 +700,7 @@ function onLogin(human, isNew)
 		ReportManager.login(human)
 	end
     LostTempleLogic.onLogin(human)
+	HuanJingTowerLogic.onLogin(human)
     SettingLogic.onLogin(human)
 	GuideLogic.onLogin(human)
 	CombatLogic.onLogin(human) -- reyes test

+ 1 - 1
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
 

+ 33 - 22
script/module/bag/Grid.lua

@@ -31,7 +31,7 @@ function makeItem(net, itemID, itemCnt, shuijingAttrID, itemGrid, itemIndex, opF
 	net.rare  = itemConfig and itemConfig.rare or 0
 	net.score  = itemConfig and itemConfig.score or 0
 	net.getway = net.getway or {}
-	net.getway[0] = (itemConfig and itemConfig.getway) and #itemConfig.getway or 0	
+	net.getway[0] = (itemConfig and itemConfig.getway) and #itemConfig.getway or 0
 	for i=1, net.getway[0] do
 		net.getway[i] = itemConfig.getway[i]
 	end
@@ -266,35 +266,43 @@ function makeItemSuipian(net, itemConfig)
 		return
 	end
 	if itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN and
-		itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_SKIN then
+		itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_SKIN and
+		itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_TALISMAM then
 		return
 	end
 
 	net.suipian[0] = 1
 	net.suipian[1] = net.suipian[1] or {}
 	net.suipian[1].fullcnt = itemConfig.fullCnt
-	net.suipian[1].camp = itemConfig.cond[1] or 0
-	net.suipian[1].star = itemConfig.cond[2] or 0
     net.suipian[1].get = itemConfig.get[1] or 0
 
-	local heroID = itemConfig.get[3]
- 	local heroConfig = HeroExcel.hero[heroID]
-
-	net.suipian[1].grade = heroConfig and heroConfig.grade or 0
-
-	if itemConfig.get[1] == SuipianLogic.SUMMON_TYPE_TARGET then 
-		local dropType = itemConfig.get[2]
-		if dropType == SuipianLogic.SUMMON_SUBTYPE_HERO then
-			local heroID = itemConfig.get[3]
-			local heroConfig = HeroExcel.hero[heroID]
-			if heroConfig then 
-				net.suipian[1].camp = heroConfig.camp  
-				net.suipian[1].star = heroConfig.star 
-				net.icon = heroConfig.head
+	if itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN or itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_SKIN then
+		net.suipian[1].camp = itemConfig.cond[1] or 0
+		net.suipian[1].star = itemConfig.cond[2] or 0
+
+		local heroID = itemConfig.get[3]
+		local heroConfig = HeroExcel.hero[heroID]
+		net.suipian[1].grade = heroConfig and heroConfig.grade or 0
+
+		if itemConfig.get[1] == SuipianLogic.SUMMON_TYPE_TARGET then
+			local dropType = itemConfig.get[2]
+			if dropType == SuipianLogic.SUMMON_SUBTYPE_HERO then
+				local heroID = itemConfig.get[3]
+				local heroConfig = HeroExcel.hero[heroID]
+				if heroConfig then 
+					net.suipian[1].camp = heroConfig.camp
+					net.suipian[1].star = heroConfig.star
+					net.icon = heroConfig.head
+				end
 			end
 		end
+	elseif itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_TALISMAM then
+		net.suipian[1].camp = 0
+		net.suipian[1].star = 0
+		net.suipian[1].grade = itemConfig.rare or 0
 	end
-end 
+end
+
 
 
 --------------------------------------------- 可操作 -------------------------------------------------------
@@ -468,15 +476,18 @@ function canHeCheng(itemConfig)
 	if getWay == SuipianLogic.SUMMON_TYPE_TARGET or getWay == SuipianLogic.SUMMON_TYPE_DROP then	
 		local suipianType = itemConfig.get[2]
 		if suipianType == SuipianLogic.SUMMON_SUBTYPE_HERO then
-           return true
+			return true
 		end
 		if suipianType == SuipianLogic.SUMMON_SUBTYPE_SKIN then
-           return true
+			return true
+		end
+		if suipianType == SuipianLogic.SUMMON_SUBTYPE_TALISAM then
+			return true
 		end
 	end
 
     if ItemDefine.isFuwen(itemConfig.id) then
-       return true
+		return true
     end
 end
 

+ 6 - 4
script/module/bag/ItemDefine.lua

@@ -28,10 +28,12 @@ EQUIP_SUBTYPE_SHENQI = 6 		-- 神器
 EQUIP_MAX_CNT = 6				-- 装备最大部位数量
 
 -- 道具子类型
-ITEM_SUBTYPE_SPOBJ = 0 			-- 自动使用
-ITEM_SUBTYPE_COMMON = 1 		-- 普通道具
-ITEM_SUBTYPE_SUIPIAN = 2 		-- 普通碎片
-ITEM_SUBTYPE_SUIPIAN_SKIN = 3 	-- 皮肤碎片
+ITEM_SUBTYPE_SPOBJ = 0 				-- 自动使用
+ITEM_SUBTYPE_COMMON = 1 			-- 普通道具
+ITEM_SUBTYPE_SUIPIAN = 2 			-- 普通碎片
+ITEM_SUBTYPE_SUIPIAN_SKIN = 3 		-- 皮肤碎片
+ITEM_SUBTYPE_TALISMAM = 4 			-- 秘宝
+ITEM_SUBTYPE_SUIPIAN_TALISMAM = 5 	-- 秘宝碎片
 
 -- 道具可操作类型
 ITEM_OP_USE = 1 				-- 使用

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

@@ -61,7 +61,7 @@ FuWen = {
 ItemData = {
 	{"id",			1,		 "int"},	  --id
 	{"cnt",         1,   	 "double"},   --数量
-	{"mainType",    1,   	 "byte"},     --主类型 1英雄2道具3装备
+	{"mainType",    1,   	 "byte"},     --主类型 1英雄2道具3装备4-秘宝5-秘宝碎片
 	{"subType",     1,   	 "byte"},     --子类型
 	{"order",       1,   	 "int"},      --排序id
 	{"icon",        1,       "int"},  	  --图标
@@ -131,7 +131,7 @@ GC_SUIPIAN_HERO_QUERY = {
 	{"heroSimple",    1,      require("hero.Proto").HeroSimple},
 }
 
--- 碎片召唤
+-- 碎片合成
 CG_SUIPIAN_SUMMON = {
 	{"itemID",        1,      "int"},
 	{"itemCnt",       1,      "int"},

+ 25 - 10
script/module/bag/SuipianLogic.lua

@@ -22,6 +22,7 @@ SUMMON_TYPE_SHENQI_SP = 4 -- 神器条件兑换
 SUMMON_SUBTYPE_HERO = 1 -- 英雄
 SUMMON_SUBTYPE_EQUIP = 2 -- 装备
 SUMMON_SUBTYPE_SKIN = 3  -- 皮肤
+SUMMON_SUBTYPE_TALISAM = 4 --秘宝
 
 -- 查询
 function query(human, itemID)
@@ -45,7 +46,7 @@ function query(human, itemID)
 	Msg.send(msgRet, human.fd)	
 end
 
--- 召唤
+-- 合成
 function summon(human, itemID, itemUseCnt)
 	if human.db.bag[itemID] == nil or human.db.bag[itemID] < itemUseCnt then
 		return
@@ -59,18 +60,29 @@ function summon(human, itemID, itemUseCnt)
 	if itemConfig.get[1] ~= SUMMON_TYPE_TARGET 
 		and itemConfig.get[1] ~= SUMMON_TYPE_DROP 
 		and itemConfig.get[1] ~= SUMMON_TYPE_HERO_SP 
-		and itemConfig.get[1] ~= SUMMON_TYPE_SHENQI_SP then	
+		and itemConfig.get[1] ~= SUMMON_TYPE_SHENQI_SP then
 		return
 	end
-	if itemConfig.get[2] ~= SUMMON_SUBTYPE_HERO and itemConfig.get[2] ~= SUMMON_SUBTYPE_EQUIP then
+
+	if itemConfig.get[2] ~= SUMMON_SUBTYPE_HERO 
+	and itemConfig.get[2] ~= SUMMON_SUBTYPE_EQUIP
+	and itemConfig.get[2] ~= SUMMON_SUBTYPE_SKIN
+	and itemConfig.get[2] ~= SUMMON_SUBTYPE_TALISAM then
 		return
 	end
 	
 	local leftHeroBox =  HeroLogic.getEmptyCnt(human)
 	
-    if itemConfig.get[2] ~= SUMMON_SUBTYPE_EQUIP then
-        if leftHeroBox <= 0 then 
-           return Broadcast.sendErr(human, Lang.HERO_BAG_FULL)
+    -- if itemConfig.get[2] ~= SUMMON_SUBTYPE_EQUIP then
+    --     if leftHeroBox <= 0 then
+	-- 		return Broadcast.sendErr(human, Lang.HERO_BAG_FULL)
+    --     end
+    -- end
+
+	--只有英雄碎片合成才判断英雄背包格子是否足够
+	if itemConfig.get[2] == SUMMON_SUBTYPE_HERO then
+        if leftHeroBox <= 0 then
+			return Broadcast.sendErr(human, Lang.HERO_BAG_FULL)
         end
     end
 
@@ -87,10 +99,13 @@ function summon(human, itemID, itemUseCnt)
 	local targetID = nil
 	if itemConfig.get[1] == SUMMON_TYPE_TARGET then
         -- 召唤数量大于剩余格子数,将真实召唤数量换成剩余格子数
-        local leftHeroBox =  HeroLogic.getEmptyCnt(human)
-        if realItemCnt > leftHeroBox then
-            realItemCnt = leftHeroBox
-        end
+		--如果是合成英雄才这么处理
+		if itemConfig.get[2] == SUMMON_SUBTYPE_HERO then
+			local leftHeroBox =  HeroLogic.getEmptyCnt(human)
+			if realItemCnt > leftHeroBox then
+				realItemCnt = leftHeroBox
+			end
+		end
 		-- 指定目标
 		targetID = itemConfig.get[3]
 	elseif itemConfig.get[1] == SUMMON_TYPE_DROP then

+ 32 - 3
script/module/battle/BattleLogic.lua

@@ -65,6 +65,7 @@ local Log = require("common.Log")
 local EliteDefine = require("battle.EliteDefine")
 local MaiDianDefine = require("MaiDian.MaiDianDefine")
 local MainDianLogic = require("MaiDian.MaiDianLogic")
+local TalismanLogic = require("talisman.TalismanLogic")
 
 BATTLE_HANG_EXP_OUT_PERIOD = 60 -- 经验产出时间间隔
 BATTLE_HANG_ITEM_OUT_PERIOD = 300 -- 战利品道具产出时间间隔
@@ -1875,6 +1876,7 @@ 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 exp = nowNodeConfig.hangExp
     local jinbi = nowNodeConfig.hangJinbi
     local greenExp = nowNodeConfig.hangGreenExp
@@ -1883,6 +1885,7 @@ 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)
 end
 
 -- 根据时间计算道具产出
@@ -2025,6 +2028,7 @@ function calcBattleItemOut(human, now,isDiamond)
         tBattleOut.itemTs2 = now
     end
 
+    local talismanAdd = (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
@@ -2039,6 +2043,9 @@ 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)
+            end
             tBattleOut.items[itemID] = tBattleOut.items[itemID] + itemCnt
         end
     end
@@ -2658,6 +2665,9 @@ function mopupQuery(human)
     local dropConfig = DropExcel.dropBattle[dropID]
     local dropCnt = 0
 
+    --秘宝加成
+    local talismanAdd = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_ZS) or 0) / 100
+
     -- ABS掉落活动显示到第一个
     dropCnt = DropExchangeLogic.getDropItemSaoQuery(human, msgRet, dropCnt)
     for i = 1, #dropConfig.dropRule do
@@ -2667,7 +2677,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 > 0 then
+            itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd)
+        end
+        Grid.makeItem(msgRet.item[dropCnt], itemID, itemCnt)
     end
     for i = 1, #dropConfig.dropRule3 do
         if dropCnt >= #msgRet.item then
@@ -2676,7 +2690,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 > 0 then
+            itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd)
+        end
+        Grid.makeItem(msgRet.item[dropCnt], itemID, itemCnt)
     end
 
     -- local mapConfig = BattleExcel.map[nodeConfig.mapID]
@@ -2719,12 +2737,13 @@ function mopupQuery(human)
         msgRet.need = 0
     end
 
+    talismanAdd = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_QB) or 0) / 100
     msgRet.vip = TequanShopLogic.isActiveMopup(human) and 1 or 0
     msgRet.nowCnt = human.db.mopupDoCnt
     msgRet.exp = nodeConfig.hangExp
     msgRet.jinbi = nodeConfig.hangJinbi
     msgRet.greenExp = nodeConfig.hangGreenExp
-    msgRet.qingbao = nodeConfig.hangQingbao
+    msgRet.qingbao = nodeConfig.hangQingbao + math.ceil(nodeConfig.hangQingbao * talismanAdd)
     print("[mopupQuery] nowCnt = "..msgRet.nowCnt.." leftCnt = "..msgRet.leftCnt.." nNowAddFreeCnt = "..nNowAddFreeCnt)
     Msg.send(msgRet, human.fd)
 end
@@ -2810,6 +2829,7 @@ 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 = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_QB) or 0) / 100
     local exp = config.hangExp * 120
     local jinbi = config.hangJinbi * 120
     local greenExp = config.hangGreenExp * 120
@@ -2818,6 +2838,8 @@ 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)
+
     local time = 7200
     local itemTable = getItemOutsByTime(config, time)
     -- 掉落活动
@@ -2840,11 +2862,18 @@ function mopupFight(human)
     itemTable[ItemDefine.ITEM_QINGBAO_ID] = itemTable[ItemDefine.ITEM_QINGBAO_ID] + addQingbao
     msgRet.item[0] = 0
 
+    --秘宝
+    talismanAdd = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.GJ_ZS) or 0) / 100
     -- 双倍日
     local double = RoleSystemLogic.isDouble(human, RoleSystemDefine.ROLE_SYS_ID_1101)
     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 > 0 then
+            itemCnt = itemCnt + math.ceil(itemCnt * talismanAdd)
+        end
+
         if not ItemDefine.isEquip(itemID) then
             msgRet.item[0] = msgRet.item[0] + 1
             Grid.makeItem(msgRet.item[msgRet.item[0]], itemID, itemCnt)

+ 11 - 0
script/module/chat/Gm.lua

@@ -1901,4 +1901,15 @@ function d3.zzjl(human, value)
 	local levelCnt = tonumber(string.sub(value,pos+1,#value))
 	local RacialTrialLogic = require("racialTrial.RacialTrialLogic")
 	RacialTrialLogic.GmAddDailyAwardCnt(human, camp, levelCnt)
+end
+
+------------秘宝---------------------
+--设置某个秘宝的等级
+function d3.mblv(human, value)
+	local pos = string.find(value, " ", 1, true)
+	if pos == nil then return end
+	local id = tonumber(string.sub(value, 1, pos - 1))
+	local level = tonumber(string.sub(value,pos+1,#value))
+	local TalismanLogic = require("talisman.TalismanLogic")
+	TalismanLogic.GmSetlevel(human, id, level)
 end

+ 1 - 0
script/module/chengjiu/ChengjiuLogic.lua

@@ -317,6 +317,7 @@ function onCallback(human,taskType,cnt)
             human.db.chengjiu.task[k] = CJ_TASK_STATE_1
             RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_2001)
             RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_2002)
+            RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_2004)
             
             local msgRet = Msg.gc.GC_CHENGJIU_SET
             msgRet.taskID = k

+ 21 - 3
script/module/copy/CopyLogic.lua

@@ -20,6 +20,7 @@ local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
 local DragonNestLogic = require("copy.DragonNestLogic")
 local MengxinLogic = require("present.MengxinLogic")
 local YunYingLogic = require("yunying.YunYingLogic")
+local TalismanLogic = require("talisman.TalismanLogic")
 
 COPY_TYPE_JINBI   = 1               --金币挑战
 COPY_TYPE_EXP     = 2     			--经验挑战
@@ -129,6 +130,9 @@ function challengeQuery(human, copyType)
 	local ts1 = Util.getDayStartTime(now)
 	msgRet.nextRefreshTime = 24 * 60 * 60 - (now - ts1)
 	
+	--秘宝加成
+	local talismanAdd = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.NW_JB) or 0) / 100
+
 	local j = 0  -- 存储相同副本类型的数量
 	for i=1, #CopyExcel.copy do
 		local copyConfig = CopyExcel.copy[i]
@@ -143,6 +147,9 @@ 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)
+				end
 				Grid.makeItem(msgRet.list[j].reward[key], itemID, itemCnt)
 			end
 		end
@@ -210,25 +217,36 @@ function doFightEnd(human,copyID,combatInfo, touch)
 	end
 
     local double = RoleSystemLogic.isDouble(human,  RoleSystemDefine.ROLE_SYS_ID_1206)
+
 	-- 给奖励
 	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]
-		BagLogic.addItem(human, itemID, itemCnt * rewardRate * fightCnt, "copy_win")
+		local finalCnt = itemCnt * rewardRate * fightCnt
+		if itemID == ItemDefine.ITEM_JINBI_ID and talismanAdd > 0 then
+			finalCnt = finalCnt + math.ceil(finalCnt * talismanAdd)
+		end
+		BagLogic.addItem(human, itemID, finalCnt, "copy_win")
 		local index = #itemList+1
 		itemList[index] = {}
 		itemList[index][1] = itemID
-		itemList[index][2] = itemCnt * rewardRate * fightCnt
+		itemList[index][2] = finalCnt
 
 		if combatInfo and combatInfo.rewardItem then --为nil时是扫荡调用这个方法
 			for j = 1, rewardRate do
 				local nowTotalCnt = #combatInfo.rewardItem
 				combatInfo.rewardItem[nowTotalCnt + 1] = {}
 				combatInfo.rewardItem[nowTotalCnt + 1][1] = itemID
-				combatInfo.rewardItem[nowTotalCnt + 1][2] = itemCnt * rewardRate * fightCnt
+				if itemID == ItemDefine.ITEM_JINBI_ID and talismanAdd > 0 then
+					combatInfo.rewardItem[nowTotalCnt + 1][2] = finalCnt
+				else
+					combatInfo.rewardItem[nowTotalCnt + 1][2] = itemCnt * rewardRate * fightCnt
+				end
 			end
 			combatInfo.double = double and 2 or 0
 		end

+ 17 - 0
script/module/huanjingTower/HuanjingTowerLogic.lua

@@ -723,6 +723,13 @@ function updateDaily(human)
     end
 end
 
+--处理无法完成新成就任务问题
+function onLogin(human)
+    if human.db.tower and human.db.tower.lv and human.db.tower.lv > 0 then
+        ChengjiuLogic.onCallback(human, ChengjiuDefine.CJ_TASK_TYPE_9, human.db.tower.lv)
+    end
+end
+
 function addBuyCnt(human, add)
     human.db.tower = human.db.tower or {}
     human.db.tower.buyCnt = human.db.tower.buyCnt or 0
@@ -853,6 +860,7 @@ function setTowerByGm(human, lv)
     local oldLv = human.db.tower.lv or 0
     human.db.tower.lv = lv
     towerHeadChange(human, oldLv, lv)
+    ChengjiuLogic.onCallback(human, ChengjiuDefine.CJ_TASK_TYPE_9, lv)
 end
 
 function isDot(human)
@@ -956,6 +964,15 @@ function getAllHumanByLv(human, lv)
     Msg.send(msgRet, human.fd)
 end
 
+--对外接口, 获取当前层数
+function getTowerLevel(human)
+    local lv = 0
+    if human.db.tower then
+        lv = human.db.tower.lv or 0
+    end
+    return lv
+end
+
 --------------------------------------------- combat ----------------------------------------------
 function getCombatMonsterOutID(human, side, args)
     if side ~= CombatDefine.DEFEND_SIDE then

+ 3 - 1
script/module/jinbiExchange/JinbiExchangeLogic.lua

@@ -11,6 +11,7 @@ local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
 local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
 local VipLogic = require("vip.VipLogic")
 local YunYingLogic = require("yunying.YunYingLogic")
+local TalismanLogic = require("talisman.TalismanLogic")
 
 MAINTYPE_FREE = 1
 REFRESH_HOURS = {0, 9, 19}
@@ -94,8 +95,9 @@ function getJinbiCnt(human, mainType)
     if not jinbiExchangeConfig then return end
     
     --local vipAdd = (VipLogic.getPowerArgs(human, VipLogic.VIP_POWER11) or 0) / 100
+    local talismanAdd = (TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.DJ) or 0) / 100
     local baseCnt = jinbiExchangeConfig[mainType] or 0
-    local jinbiCnt = baseCnt
+    local jinbiCnt = baseCnt + math.ceil(baseCnt * talismanAdd)
     return jinbiCnt
 end
 

+ 3 - 0
script/module/role/RoleAttr.lua

@@ -37,6 +37,7 @@ local EquipLogic = require("equip.EquipLogic")
 local CombatPosLogic = require("combat.CombatPosLogic")
 local CombatDefine = require("combat.CombatDefine")
 local RoleRealmLogic = require("roleSystem.RoleRealmLogic")
+local TalismanLogic = require("talisman.TalismanLogic")
 
 -- 计算人数属性
 function doCalc(human)
@@ -151,6 +152,8 @@ function calcHeroGrid(heroGrid, index, human)
 
 	RoleRealmLogic.doCalcHero(human, HERO_OTHER_ATTRS) --境界
 
+	TalismanLogic.doCalcHero(human, heroGrid, HERO_OTHER_ATTRS) --秘宝
+
 	--不同模块在英雄属性计算 end	
 	
 	-- 计算评分

+ 1 - 0
script/module/role/RoleDBLogic.lua

@@ -422,6 +422,7 @@ function createDefaultRole(account)
 		realmLv = nil,							--境界
 		RacialTrial = nil,						--种族试炼
 		nFirstBuy = nil,						--第一次购买
+		talismanData = nil,						--秘宝
 
         mergeInfo = {},   --融合信息 {mergeStartTime: 0 , mergeTime: 0, mergeEndTime: 0, heroId: 0}
 		gift = {

+ 1 - 1
script/module/roleSystem/Proto.lua

@@ -22,7 +22,7 @@ CG_ROLESYSTEM_QUERY = {
 }
 
 GC_ROLESYSTEM_QUERY = {
-	{"list",		70,		RoleSystemNet},	
+	{"list",		100,		RoleSystemNet},	
 }
 
 CG_ROLESYSTEM_TOUCH = {

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

@@ -58,6 +58,7 @@ ROLE_SYS_ID_1401 = 1401 -- 天梯
 ROLE_SYS_ID_2001 = 2001 -- 宝具-封印之章
 ROLE_SYS_ID_2002 = 2002 -- 宝具-守护之龙
 ROLE_SYS_ID_2003 = 2003 -- 宝具-守护之龙洗练
+ROLE_SYS_ID_2004 = 2004 --秘宝
 
 ROLE_SYS_ID_3001 = 3001 -- 福利
 ROLE_SYS_ID_3101 = 3101 -- 首充
@@ -66,6 +67,12 @@ ROLE_SYS_ID_3201 = 3201 -- 活动大厅
 
 ROLE_SYS_ID_2005 = 2005 -- 战令
 
+-----------------秘宝,用于红点-----------
+ROLE_SYS_ID_2006 = 2006
+ROLE_SYS_ID_2007 = 2007
+ROLE_SYS_ID_2008 = 2008
+ROLE_SYS_ID_2009 = 2009
+ROLE_SYS_ID_2010 = 2010
 
 
 

+ 10 - 0
script/module/talisman/Handler.lua

@@ -0,0 +1,10 @@
+local TalismanLogic = require("talisman.TalismanLogic")
+
+
+function CG_TALISMAN_QUERY(human, msg)
+	TalismanLogic.Query(human, msg.type)
+end
+
+function CG_TALISMAN_UPGRADE(human, msg)
+	TalismanLogic.UpGrade(human, msg.id)
+end

+ 37 - 0
script/module/talisman/Proto.lua

@@ -0,0 +1,37 @@
+local ItemData = require("bag.Proto").ItemData
+
+DESC_DATA = {
+	{"desc",			1,		"string"},  	--描述
+	{"isActivate",		1,		"byte"},		--是否激活, 0-未激活, 1-已激活
+}
+
+
+TALISMAN_INFO = {
+	{"id",				1,			"int"},			--秘宝ID
+	{"name",			1,			"string"},  	--名称
+	{"iconId",			1,			"int"},			--iconID
+	{"level",			1,			"byte"},  		--秘宝等级, >0 表示秘宝已经获得
+	{"descVec",			10,			DESC_DATA}, 	--秘宝描述
+	{"upGradeCost",		1,			ItemData},  	--激活/升级消耗道具信息
+}
+
+
+--查询
+CG_TALISMAN_QUERY = {
+	{"type",		1,		"byte"},  --秘宝类型
+}
+
+GC_TALISMAN_QUERY = {
+	{"type",      			1,   		"byte"},			--秘宝类型
+	{"talismanVec", 		10, 		TALISMAN_INFO}		--当前类型的所有秘宝数据
+}
+
+--激活/升级
+CG_TALISMAN_UPGRADE = {
+	{"id",		1,		"int"},  	--秘宝ID
+}
+
+GC_TALISMAN_UPGRADE = {
+	{"type",      			1,   		"byte"},		--秘宝类型
+	{"talismanInfo", 		1, 		TALISMAN_INFO}		--单个秘宝数据
+}

+ 356 - 0
script/module/talisman/TalismanLogic.lua

@@ -0,0 +1,356 @@
+--秘宝系统
+--[=[
+    db
+    human.db.talismanData = 
+    {
+        [ID1] = level,
+        [ID2] = level,
+    } 
+]=]--
+local Msg = require("core.Msg")
+local Grid = require("bag.Grid")
+local BagLogic = require("bag.BagLogic")
+local Lang = require("common.Lang")
+local RoleAttr = require("role.RoleAttr")
+local RoleDefine = require("role.RoleDefine")
+local ObjHuman = require("core.ObjHuman")
+local Broadcast = require("broadcast.Broadcast")
+local talismanConfig = require("excel.talisman").talisman
+local HeroConfig = require("excel.hero").hero
+local HuanJingTowerLogic = require("huanjingTower.HuanjingTowerLogic")
+local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
+local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
+
+
+local LOGTYPE = "talisman"
+local COND_TOWER_LEVEL = 100 --开启本系统需要通关恶魔之塔的层数
+
+--秘宝对挂机钻石/情报等其他方面加成标识
+OTHER_EFFECT_TBL = {
+    ["GJ_QB"] = "GJ_QB",            --挂机情报类型
+    ["GJ_ZS"] = "GJ_ZS",            --挂机钻石类型
+    ["DJ"] = "DJ",                  --点金
+    ["NW_JB"] = "NW_JB",            --女巫森林金币类型
+}
+
+--是否开启本系统
+local function isOpen(human)
+    local towerLevel = HuanJingTowerLogic.getTowerLevel(human)
+    if towerLevel >= COND_TOWER_LEVEL then
+        return true
+    end
+    return false
+end
+
+--取对应类型的秘宝配置
+local function generateCfgByType(type_m)
+    local tbl = {}
+    for id, cfg in pairs(talismanConfig) do
+        if cfg.type == type_m then
+            tbl[id] = cfg
+            tbl[id].id = id
+        end
+    end
+    if not next(tbl) then
+        return nil
+    end
+    return tbl
+end
+
+--填充协议的数据
+local function populateMsg(config, msgTb, nLevel)
+    msgTb.id = config.id
+    msgTb.name = config.name
+    msgTb.iconId = config.iconId
+    msgTb.level = nLevel
+
+    local descVec = msgTb.descVec
+    local effectDescCfg = config.effectDesc
+    descVec[0] = #effectDescCfg
+    for idx, desc in ipairs(effectDescCfg) do
+        local singleDesc = descVec[idx]
+        singleDesc.desc = desc
+        singleDesc.isActivate = nLevel >= idx and 1 or 0
+    end
+
+    if nLevel < config.maxLevel then
+        nLevel = nLevel + 1
+        nLevel = math.ceil(nLevel/3)
+    else
+        nLevel = 0
+    end
+    Grid.makeItem(msgTb.upGradeCost, config.costItemId, nLevel)
+end
+
+
+-- local function send(human, type_m)
+--     local cfg = generateCfgByType(type_m)
+--     if not cfg then
+--         return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+--     end
+
+--     local msgRet = Msg.gc.GC_TALISMAN_QUERY
+--     msgRet.type = type_m
+--     local talismanVec = msgRet.talismanVec
+--     talismanVec[0] = #cfg
+
+--     local talismanData
+--     if human.db.talismanData and human.db.talismanData[type_m] then
+--         talismanData = human.db.talismanData[type_m]
+--     end
+
+--     local mathCeil = math.ceil
+--     for i = 1, #cfg do
+--         local singleCfg = cfg[i]
+--         local singleTalisman = talismanVec[i]
+
+--         singleTalisman.id = singleCfg.id
+--         singleTalisman.name = singleCfg.name
+--         singleTalisman.iconId = singleCfg.iconId
+
+--         local nLevel = 0
+--         if talismanData and talismanData[singleCfg.id] then
+--             nLevel = talismanData[singleCfg.id]
+--         end
+--         singleTalisman.level = nLevel
+
+--         local descList = singleTalisman.descList
+--         local effectDescCfg = singleCfg.effectDesc
+--         descList[0] = #effectDescCfg
+--         for j = 1, #effectDescCfg do
+--             local singleDesc = descList[j]
+--             singleDesc.desc = effectDescCfg[j]
+--             singleDesc.isActivate = nLevel >= j and 1 or 0
+--         end
+
+--         if nLevel < singleCfg.maxLevel then
+--             nLevel = nLevel + 1
+--             nLevel = mathCeil(nLevel/3)
+--         else
+--             nLevel = 0
+--         end
+--         Grid.makeItem(singleTalisman.upGradeCost, singleCfg.costItemId, nLevel)
+--     end
+--     Msg.send(msgRet, human.fd)
+-- end
+
+--红点判断
+local function dotJudgment(human, cfgHtbl)
+    local talismanData = human.db.talismanData
+    for id, cfg in pairs(cfgHtbl) do
+        local nLevel = 0
+        if talismanData and talismanData[id] then
+            nLevel = talismanData[id]
+        end
+
+        if nLevel < cfg.maxLevel then
+            nLevel = nLevel + 1
+            local costItemCnt = math.ceil(nLevel/3)
+            if BagLogic.getItemCnt(human, cfg.costItemId) >= costItemCnt then
+                return true
+            end
+        end
+    end
+    return false
+end
+
+--GM命令, 设置秘宝等级
+function GmSetlevel(human, id, level)
+    local config = talismanConfig[id]
+    if not config then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+    if level > config.maxLevel then
+        level = config.maxLevel
+    end
+    if level < 0 then
+        level = 0
+    end
+    human.db.talismanData = human.db.talismanData or {}
+    human.db.talismanData[id] = level
+end
+
+
+--秘宝对英雄属性加成
+function doCalcHero(human, heroGrid, addAttrs)
+    if not human or not heroGrid then
+        return
+    end
+
+    local talismanData = human.db.talismanData
+    if not talismanData then
+        return
+    end
+
+    local heroCfg = HeroConfig[heroGrid.id]
+
+    for id, level in pairs(talismanData) do
+        local attrs = talismanConfig[id].attrs
+        for i=1, level do
+            local singleAttr = attrs[i]
+            if #singleAttr == 2 and type(singleAttr[1]) == "number" then --给所有英雄加属性
+                RoleAttr.updateValue(singleAttr[1], singleAttr[2], addAttrs)
+            elseif #singleAttr == 3 then --只给某个种族的英雄加属性
+                if singleAttr[1] == heroCfg.camp then
+                    RoleAttr.updateValue(singleAttr[2], singleAttr[3], addAttrs)
+                end
+            end
+        end
+    end
+
+end
+
+--红点
+function isDot(human, dotConfig)
+    if not isOpen(human) then
+        return false
+    end
+    --入口处的红点判断
+    if dotConfig.id == RoleSystemDefine.ROLE_SYS_ID_2006 then
+        return dotJudgment(human, talismanConfig)
+    else
+        --单个分页的红点
+        local talismanType = 0
+        if dotConfig.id == RoleSystemDefine.ROLE_SYS_ID_2007 then
+            talismanType = 1
+        elseif dotConfig.id == RoleSystemDefine.ROLE_SYS_ID_2008 then
+            talismanType = 2
+        elseif dotConfig.id == RoleSystemDefine.ROLE_SYS_ID_2009 then
+            talismanType = 3
+        else
+            talismanType = 4
+        end
+
+        local cfgHtbl = generateCfgByType(talismanType)
+        if not cfgHtbl then
+            return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+        end
+
+        return dotJudgment(human, cfgHtbl)
+    end
+end
+
+--秘宝对其他方面的加成, 如:挂机钻石
+function getTalismanAdd(human, type_m)
+    local addValue = 0
+    local talismanData = human.db.talismanData
+    if not talismanData or not type_m then
+        return addValue
+    end
+
+    for id, level in pairs(talismanData) do
+        local cfg = talismanConfig[id]
+        local attrs = cfg.attrs
+        for i=1,#attrs do
+            local singleAttr = attrs[i]
+            local addType = singleAttr[1]
+            if type(addType) == "string" and level >= i and type_m == addType then
+                addValue = addValue + singleAttr[2]
+            end
+        end
+    end
+    return addValue
+end
+
+
+--查询
+function Query(human, type_m)
+    if not type_m then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    if not isOpen(human) then
+        return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
+    end
+
+    local cfgHtbl = generateCfgByType(type_m)
+    if not cfgHtbl then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    local msgRet = Msg.gc.GC_TALISMAN_QUERY
+    msgRet.type = type_m
+    local talismanVec = msgRet.talismanVec
+
+    local len = 0
+    local talismanData = human.db.talismanData
+    for id, cfg in pairs(cfgHtbl) do
+        len = len + 1
+        local nLevel = 0
+        if talismanData and talismanData[id] then
+            nLevel = talismanData[id]
+        end
+        populateMsg(cfg, talismanVec[len], nLevel)
+    end
+    talismanVec[0] = len
+    Msg.send(msgRet, human.fd)
+end
+
+--升级
+function UpGrade(human, id)
+    if not isOpen(human) then
+        return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
+    end
+
+    local singleCfg = talismanConfig[id]
+    if not singleCfg then
+        return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
+    end
+
+    local nLevel = 0
+    local type = singleCfg.type
+
+    --等级判断
+    if human.db.talismanData and human.db.talismanData[id] then
+        nLevel = human.db.talismanData[id]
+    end
+    if nLevel >= singleCfg.maxLevel then
+        return Broadcast.sendErr(human, Lang.COMMON_MAXLEVEL)
+    end
+
+    --道具判断
+    nLevel = nLevel + 1
+    local costItemId = singleCfg.costItemId
+    local costItemCnt = math.ceil(nLevel/3)
+    if BagLogic.getItemCnt(human, costItemId) < costItemCnt then
+        return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
+    end
+    BagLogic.delItem(human, costItemId, costItemCnt, LOGTYPE)
+
+    --更新数据
+    human.db.talismanData = human.db.talismanData or {}
+    human.db.talismanData[id] = nLevel
+
+    --下发数据
+    local msgRet = Msg.gc.GC_TALISMAN_UPGRADE
+    msgRet.type = type
+    populateMsg(singleCfg, msgRet.talismanInfo, nLevel)
+    Msg.send(msgRet, human.fd)
+
+    --重算战力
+    RoleAttr.cleanHeroAttrCache(human)
+    RoleAttr.doCalc(human)
+    ObjHuman.sendAttr(human, RoleDefine.ZHANDOULI)
+
+    --刷新红点
+    nLevel = nLevel + 1
+    costItemCnt = math.ceil(nLevel/3)
+    if nLevel >= singleCfg.maxLevel or BagLogic.getItemCnt(human, costItemId) < costItemCnt then
+        local dotID = 0
+        if type == 1 then
+            dotID = RoleSystemDefine.ROLE_SYS_ID_2007
+        elseif type == 2 then
+            dotID = RoleSystemDefine.ROLE_SYS_ID_2008
+        elseif type == 3 then
+            dotID = RoleSystemDefine.ROLE_SYS_ID_2009
+        else
+            dotID = RoleSystemDefine.ROLE_SYS_ID_2010
+        end
+
+        --刷新单页
+        RoleSystemLogic.onDot(human, dotID)
+        --刷新入口处
+        RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_2006)
+    end
+
+end