Selaa lähdekoodia

修改等级>=15级装备套装属性逻辑

gitxsm 1 kuukausi sitten
vanhempi
sitoutus
b902a98b3b

+ 17 - 8
script/module/bag/Grid.lua

@@ -11,9 +11,10 @@ local ItemDefine = require("bag.ItemDefine")
 local SuipianLogic = require("bag.SuipianLogic")
 local RoleAttr = require("role.RoleAttr")
 local EquipLogic = require("equip.EquipLogic")
+local EquipLogicGrid = require("equip.EquipLogicGrid")
 
 -- 填充装备,道具信息 
-function makeItem(net, itemID, itemCnt, shuijingAttrID, itemGrid, itemIndex, opFlag, equipQuality, gemBonus, sourceType, isShowEquipBaseAttrArea)
+function makeItem(net, itemID, itemCnt, shuijingAttrID, itemGrid, itemIndex, opFlag, equipQuality, gemBonus, sourceType, human)
 	local itemConfig = ItemDefine.getConfig(itemID)
 	net.id = itemConfig and itemID or 0 
 	net.cnt = itemConfig and itemCnt or 0
@@ -52,7 +53,7 @@ function makeItem(net, itemID, itemCnt, shuijingAttrID, itemGrid, itemIndex, opF
 
     makeItemSuipian(net, itemConfig)
     makeItemFuwen(net, itemID, itemConfig, itemGrid, itemIndex)
-    makeItemEquip(net, itemConfig, itemGrid, itemIndex, shuijingAttrID, equipQuality, gemBonus, isShowEquipBaseAttrArea)
+    makeItemEquip(net, itemConfig, itemGrid, itemIndex, shuijingAttrID, equipQuality, gemBonus, human)
 end
 
 function makeFuwenSkill(net, skillID, skillLockList)
@@ -143,7 +144,7 @@ function makeItemFuwen(net, itemID, itemConfig, fuwenGrid, fuwenIndex)
 	end
 end
 
-function makeItemEquip(net, itemConfig, equipGrid, equipIndex, shuijingAttrID, equipQuality, gemBonus, isShowEquipBaseAttrArea)
+function makeItemEquip(net, itemConfig, equipGrid, equipIndex, shuijingAttrID, equipQuality, gemBonus, human)
 	if itemConfig.mainType ~= ItemDefine.MAINTYPE_EQUIP then
 		return
 	end
@@ -332,26 +333,34 @@ function makeItemEquip(net, itemConfig, equipGrid, equipIndex, shuijingAttrID, e
 	net.equip[1].suit = net.equip[1].suit or {}
 	net.equip[1].suit[0] = 0
 	if itemConfig.suitIm then
+		local suitImTemp = itemConfig.suitIm
+		if itemConfig.jobSuitIm and next(itemConfig.jobSuitIm) then
+			suitImTemp = Util.copyTable(itemConfig.suitIm)
+			local jobId = EquipLogicGrid.GetEquipOwnerJob(human, equipGrid)
+			local attrInfo = itemConfig.jobSuitIm[jobId]
+			EquipLogicGrid.MergeEquipSuitIm(suitImTemp, attrInfo)
+		end
+
 		net.equip[1].suit = net.equip[1].suit or {}
 		net.equip[1].suit[0] = 1
 		net.equip[1].suit[1] = net.equip[1].suit[1] or {}
 		net.equip[1].suit[1].attr = net.equip[1].suit[1].attr or {}
-		net.equip[1].suit[1].attr[0] = #itemConfig.suitIm
+		net.equip[1].suit[1].attr[0] = #suitImTemp -- #itemConfig.suitIm
 
 		net.equip[1].suit[1].gemAttr[0] = 0
 		if gemBonus then
-			net.equip[1].suit[1].gemAttr[0] = #itemConfig.suitIm
+			net.equip[1].suit[1].gemAttr[0] = #suitImTemp -- #itemConfig.suitIm
 		end
 
 		for i=1,net.equip[1].suit[1].attr[0] do
 			net.equip[1].suit[1].attr[i] = net.equip[1].suit[1].attr[i] or {}
-			net.equip[1].suit[1].attr[i].key = itemConfig.suitIm[i][1]
-			net.equip[1].suit[1].attr[i].value = itemConfig.suitIm[i][2]
+			net.equip[1].suit[1].attr[i].key = suitImTemp[i][1] -- itemConfig.suitIm[i][1]
+			net.equip[1].suit[1].attr[i].value = suitImTemp[i][2] -- itemConfig.suitIm[i][2]
 
 
 			if gemBonus and (gemBonus[i+1] or gemBonus.sp_suit) then
 				net.equip[1].suit[1].gemAttr[i] = net.equip[1].suit[1].gemAttr[i] or {}
-				net.equip[1].suit[1].gemAttr[i].key = itemConfig.suitIm[i][1]
+				net.equip[1].suit[1].gemAttr[i].key = suitImTemp[i][1] -- itemConfig.suitIm[i][1]
 
 				if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_RING or itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
 					net.equip[1].suit[1].gemAttr[i].value = gemBonus.sp_suit * 100

+ 34 - 0
script/module/equip/EquipLogicGrid.lua

@@ -7,6 +7,8 @@ local EquipExcel = require("excel.equip").equip
 -- local EquipLogic = require("equip.EquipLogic")
 local ItemDefine = require("bag.ItemDefine")
 local Util = require("common.Util")
+local HeroLogic = require("hero.HeroLogic")
+local HeroExcel = require("excel.hero")
 
 -- 装备品质
 EQUIP_COLOR_1 = 1   -- 绿
@@ -106,4 +108,36 @@ function createTempGrid(id, washAttr, washQuality)
    equip.attr = washAttr     --当前属性
    equip.quality = washQuality     --默认为1
    return equip
+end
+
+
+-- 获取穿戴装备的英雄的职业
+function GetEquipOwnerJob(human, equipGrid)
+   local jobId = 2 --默认是战士职业
+   if not human or not equipGrid or not equipGrid.putUuid then
+      return jobId
+   end
+
+   local heroGrid = HeroLogic.getHeroGridByUuid(human, equipGrid.putUuid)
+   if not heroGrid then
+      return jobId
+   end
+
+   local heroCfg = HeroExcel.hero[heroGrid.id]
+   if not heroCfg then
+      return jobId
+   end
+
+   jobId = heroCfg.job or 0
+
+   return jobId
+end
+
+-- 合并装备套装属性(用于装备等级>=15级的装备)
+function MergeEquipSuitIm(targetData, sourceData)
+   if not targetData or not sourceData or not next(sourceData) then
+      return
+   end
+
+   targetData[#targetData+1] = {sourceData[1], sourceData[2]}
 end

+ 32 - 18
script/module/hero/HeroEquip.lua

@@ -16,6 +16,7 @@ local ItemExcel = require("excel.item").item
 local FuwenLogic = require("fuwen.FuwenLogic")
 local EquipLogic = require("equip.EquipLogic")
 local HeroGem = require("hero.HeroGem")
+local EquipLogicGrid = require("equip.EquipLogicGrid")
 
 function query(human, heroID, heroIndex)
 	local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
@@ -36,9 +37,9 @@ function query(human, heroID, heroIndex)
 		if equipGrid then
 			cnt = cnt + 1
 			if i == ItemDefine.EQUIP_SUBTYPE_SHUIJIN then -- 水晶比较特殊
-				Grid.makeItem(msgRet.equips[cnt], equipGrid.id, 1, heroGrid.shuijingAttrID)
+				Grid.makeItem(msgRet.equips[cnt], equipGrid.id, 1, heroGrid.shuijingAttrID, nil, nil, nil, nil, nil, nil, human)
 			else
-				Grid.makeItem(msgRet.equips[cnt], equipGrid.id, 1, nil, equipGrid, -1, Grid.getOpflagAtBag(heroGrid.equip[i].id),nil,suitBonusTbl)
+				Grid.makeItem(msgRet.equips[cnt], equipGrid.id, 1, nil, equipGrid, -1, Grid.getOpflagAtBag(heroGrid.equip[i].id), nil, suitBonusTbl, nil, human)
 			end
 		end
 
@@ -58,7 +59,7 @@ function query(human, heroID, heroIndex)
            heroGrid.fuwen[i].id ~= nil then
 			cnt = cnt + 1
             msgRet.fuwens[cnt].pos = i
-			Grid.makeItem(msgRet.fuwens[cnt].fuwen, heroGrid.fuwen[i].id, 1,nil,heroGrid.fuwen[i],-1, Grid.getOpflagAtBag(heroGrid.fuwen[i].id))
+			Grid.makeItem(msgRet.fuwens[cnt].fuwen, heroGrid.fuwen[i].id, 1, nil, heroGrid.fuwen[i], -1, Grid.getOpflagAtBag(heroGrid.fuwen[i].id), nil, nil, nil, human)
 		end
 
 		msgRet.fuwenGrid[i] = 1
@@ -104,7 +105,7 @@ function putOn(human, heroID, heroIndex, bagIndex, noCalc)
 	--获取宝石加成
 	local suitBonusTbl = HeroGem.suitAttrBonus(heroGrid)
 
-    Grid.makeItem(msgRet.equip, equipID, 1, nil, equipGrid, bagIndex, Grid.getOpflagAtBag(equipID), nil, suitBonusTbl)
+    Grid.makeItem(msgRet.equip, equipID, 1, nil, equipGrid, bagIndex, Grid.getOpflagAtBag(equipID), nil, suitBonusTbl, nil, human)
 
     if heroGrid.equip == nil or
         heroGrid.equip[pos] == nil then
@@ -210,7 +211,7 @@ function putOnHero(human, heroID, heroIndex, putHeroID, putHeroIndex, putHeroPos
 	--获取宝石加成
 	local suitBonusTbl = HeroGem.suitAttrBonus(heroGrid)
 
-    Grid.makeItem(msgRet.equip, equipID, 1, nil, equipGrid, bagIndex, Grid.getOpflagAtBag(equipID), nil, suitBonusTbl)
+    Grid.makeItem(msgRet.equip, equipID, 1, nil, equipGrid, bagIndex, Grid.getOpflagAtBag(equipID), nil, suitBonusTbl, nil, human)
 	
     --Grid.makeItem(msgRet.equip, equipID, 1, nil, equipGrid, 0, Grid.getOpflagAtBag(equipID))
     Msg.send(msgRet, human.fd)
@@ -295,7 +296,7 @@ function putOffQuick(human, heroID, heroIndex, noSendDy)
     end
 end
 
-function doCalcHero(obj,attrs)
+function doCalcHero(human, obj, attrs)
 	local equip = obj.equip
 	if not equip then return end
 	
@@ -386,6 +387,12 @@ function doCalcHero(obj,attrs)
 					if equipConfig.subType == ItemDefine.EQUIP_SUBTYPE_RING or equipConfig.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
 						equipSuitCntTable[equipConfig.suit].isSpEquip = 1
 					end
+
+					--等级 >= 15级的装备
+					if equipConfig.jobSuitIm and next(equipConfig.jobSuitIm) then
+						local jobId = EquipLogicGrid.GetEquipOwnerJob(human, equipGrid)
+						equipSuitCntTable[equipConfig.suit].jobId = jobId
+					end
 				end
 			end
 		end
@@ -397,9 +404,16 @@ function doCalcHero(obj,attrs)
 			if v.cnt > 1 then
 				local equipIDTemp = v.equipID
 				local equipConfigTemp = EquipExcel.equip[equipIDTemp]
-				for i = 1, #equipConfigTemp.suitIm do
-					local keyTemp = equipConfigTemp.suitIm[i][1]
-					local valTemp = equipConfigTemp.suitIm[i][2]
+				local suitImCfg = equipConfigTemp.suitIm
+				if v.jobId then
+					suitImCfg = Util.copyTable(equipConfigTemp.suitIm)
+					local attrInfo = equipConfigTemp.jobSuitIm[v.jobId]
+					EquipLogicGrid.MergeEquipSuitIm(suitImCfg, attrInfo)
+				end
+
+				for i = 1, #suitImCfg do
+					local keyTemp = suitImCfg[i][1]
+					local valTemp = suitImCfg[i][2]
 					if v.cnt > i then
 						-- 普通套装
 						if v.isSpEquip ~= 1 and (suitBonusTbl and suitBonusTbl[i+1]) then
@@ -457,7 +471,7 @@ function jihuoShuijing(human, heroID, heroIndex)
 	local msgRet = Msg.gc.GC_HERO_EQUIP_PUTON
 	msgRet.heroID = heroID
 	msgRet.heroIndex = heroIndex
-	Grid.makeItem(msgRet.equip, equipID, 1, heroGrid.shuijingAttrID)
+	Grid.makeItem(msgRet.equip, equipID, 1, heroGrid.shuijingAttrID, nil, nil, nil, nil, nil, nil, human)
 	Msg.send(msgRet, human.fd)
 end
 
@@ -533,7 +547,7 @@ function shuijingTransDo(human, heroID, heroIndex)
 	human.tempAttrID = equipConfig.shuijingAttrID[indexTemp]
 
 	-- 通知客户端
-	Grid.makeItem(msgRet.equip, equipID, 1, human.tempAttrID)
+	Grid.makeItem(msgRet.equip, equipID, 1, human.tempAttrID, nil, nil, nil, nil, nil, nil, human)
 	Msg.send(msgRet, human.fd)
 end
 
@@ -567,7 +581,7 @@ function shuijingTransSave(human, heroID, heroIndex)
 	local msgRet = Msg.gc.GC_HERO_EQUIP_PUTON
 	msgRet.heroID = heroID
 	msgRet.heroIndex = heroIndex
-	Grid.makeItem(msgRet.equip, equipID, 1, heroGrid.shuijingAttrID)
+	Grid.makeItem(msgRet.equip, equipID, 1, heroGrid.shuijingAttrID, nil, nil, nil, nil, nil, nil, human)
 	Msg.send(msgRet, human.fd)
 	
 	local msgRet = Msg.gc.GC_SHUIJING_TRANS_SAVE
@@ -611,7 +625,7 @@ function shuijingUpLvQuery(human, mainType, heroID, heroIndex)
 	msgRet.equip[0] = 1
 	local attrID = heroGrid.shuijingAttrID
 	local tempAttrID = EquipExcel.shuijingAttr[attrID].lockNextID
-	Grid.makeItem(msgRet.equip[1], nextID, 1, tempAttrID)
+	Grid.makeItem(msgRet.equip[1], nextID, 1, tempAttrID, nil, nil, nil, nil, nil, nil, human)
 	Msg.send(msgRet, human.fd)
 end
 
@@ -689,13 +703,13 @@ function shuijingUpLvDo(human, mainType, heroID, heroIndex)
 	local msgRet = Msg.gc.GC_HERO_EQUIP_PUTON
 	msgRet.heroID = heroID
 	msgRet.heroIndex = heroIndex
-	Grid.makeItem(msgRet.equip, nextID, 1, heroGrid.shuijingAttrID)
+	Grid.makeItem(msgRet.equip, nextID, 1, heroGrid.shuijingAttrID, nil, nil, nil, nil, nil, nil, human)
 	Msg.send(msgRet, human.fd)
 	
 	local msgRet = Msg.gc.GC_SHUIJING_UPLV_DO
 	msgRet.heroID = heroID
 	msgRet.heroIndex = heroIndex
-	Grid.makeItem(msgRet.equip, nextID, 1, heroGrid.shuijingAttrID)
+	Grid.makeItem(msgRet.equip, nextID, 1, heroGrid.shuijingAttrID, nil, nil, nil, nil, nil, nil, human)
 	Msg.send(msgRet, human.fd)
 end
 
@@ -724,7 +738,7 @@ function shenqiUpLvQuery(human, heroID, heroIndex)
 	msgRet.heroID = heroID
 	msgRet.heroIndex = heroIndex
 	msgRet.needExp = shenqiUpNeedConfig.needExp
-	Grid.makeItem(msgRet.equip, nextID, 1)
+	Grid.makeItem(msgRet.equip, nextID, 1, nil, nil, nil, nil, nil, nil, nil, human)
 	Msg.send(msgRet, human.fd)
 end
 
@@ -811,7 +825,7 @@ function shenqiUpLvDo(human, heroID, heroIndex, equipIDList, equipCntList)
 	local msgRet = Msg.gc.GC_HERO_EQUIP_PUTON
 	msgRet.heroID = heroID
 	msgRet.heroIndex = heroIndex
-	Grid.makeItem(msgRet.equip, nextID, 1)
+	Grid.makeItem(msgRet.equip, nextID, 1, nil, nil, nil, nil, nil, nil, nil, human)
 	Msg.send(msgRet, human.fd)
 	
 	local msgRet = Msg.gc.GC_SHENQI_UPLV_DO
@@ -819,7 +833,7 @@ function shenqiUpLvDo(human, heroID, heroIndex, equipIDList, equipCntList)
 	msgRet.heroIndex = heroIndex
 	if backCnt > 0 then 
 		msgRet.equip[0] = 1
-		Grid.makeItem(msgRet.equip[1], HeroDefine.DEFAULT_SHENQI_UPLV_BACK,backCnt)
+		Grid.makeItem(msgRet.equip[1], HeroDefine.DEFAULT_SHENQI_UPLV_BACK, backCnt, nil, nil, nil, nil, nil, nil, nil, human)
 	else
 		msgRet.equip[0] = 0
 	end

+ 1 - 1
script/module/role/RoleAttr.lua

@@ -166,7 +166,7 @@ function calcHeroGrid(heroGrid, index, human)
 		SkinLogic.doCalcSkinHero(human,HERO_BASE_ATTRS)
 	end
 	BeSkill.doCalcHero(heroGrid, HERO_BASE_ATTRS) -- 被动技能属性
-	HeroEquip.doCalcHero(heroGrid, HERO_OTHER_ATTRS) -- 装备
+	HeroEquip.doCalcHero(human, heroGrid, HERO_OTHER_ATTRS) -- 装备
     FuwenLogic.doCalcHero(heroGrid, HERO_OTHER_ATTRS) -- 符文	
 	UnionTecLogic.doCalcHero(human, heroGrid, HERO_OTHER_ATTRS) -- 公会科技	
 	RoleHeadLogic.doCalcHero(human, HERO_OTHER_ATTRS) --称号