Explorar o código

新增戒指、护符装备相关逻辑

gitxsm hai 11 meses
pai
achega
ea93978272

+ 78 - 24
script/module/bag/Grid.lua

@@ -128,6 +128,7 @@ function makeItemEquip(net, itemConfig, equipGrid, equipIndex, shuijingAttrID, e
     net.equip[1].putUuid = equipGrid and equipGrid.putUuid or ""
 	net.equip[1].args = net.equip[1].args or {}
 	net.equip[1].args[0] = 0
+	net.equip[1].suitID = itemConfig.suit or 0
 
     local maxQuality = EquipLogic.getEquipMaxQuality(itemConfig)
 	net.rare  = equipGrid and equipGrid.quality or equipQuality or maxQuality
@@ -153,28 +154,72 @@ function makeItemEquip(net, itemConfig, equipGrid, equipIndex, shuijingAttrID, e
 	else
         local baseRate = EquipLogic.getEquipBaseRate(net.rare)
         net.score  = math.floor(net.score * baseRate)
-        -- 基础属性
-		net.equip[1].baseAttr = {}
-		net.equip[1].baseAttr[0] = #itemConfig.base
+		local succinctRate = baseRate
+
+		local baseAttrInfo = itemConfig.base
+		if equipGrid and equipGrid.baseAttr then
+			baseAttrInfo = equipGrid.baseAttr
+		end
+
+		net.equip[1].effects[0] = 0
+		net.equip[1].heroExclusive = ""
+
+		if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_RING or itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
+			baseRate = 1
+			--装备特效
+			if equipGrid then
+				local effectLen = 0
+				local msgEffects = net.equip[1].effects
+				for effectId in pairs(equipGrid.effectList or {}) do
+					effectLen = effectLen + 1
+					local effectCfg = EquipExcel.texiao[effectId]
+
+					msgEffects[effectLen].name = effectCfg.name
+					msgEffects[effectLen].color = effectCfg.quality
+					msgEffects[effectLen].attr.key = effectCfg.attrs[1][1]
+					msgEffects[effectLen].attr.value = effectCfg.attrs[1][2]
+				end
+				msgEffects[0] = effectLen
+
+
+				-- 英雄专属
+				if equipGrid.exclusiveHeroId then
+					local heroCfg = HeroExcel.hero[equipGrid.exclusiveHeroId]
+					net.equip[1].heroExclusive = heroCfg.name
+				end
+			end
+		end
+
+
 		--宝石
 		net.equip[1].gemBaseAttr[0] = 0
 		if gemBonus then
-			net.equip[1].gemBaseAttr[0] = #itemConfig.base
+			net.equip[1].gemBaseAttr[0] = #baseAttrInfo
 		end
-		
+
+        -- 基础属性
+		net.equip[1].baseAttr = {}
+		net.equip[1].baseAttr[0] = #baseAttrInfo
+
 		for i=1, net.equip[1].baseAttr[0] do
 			net.equip[1].baseAttr[i] = net.equip[1].baseAttr[i] or {}
-			net.equip[1].baseAttr[i].key = itemConfig.base[i][1]
-			net.equip[1].baseAttr[i].value = math.floor(itemConfig.base[i][2] * baseRate)
-			
+			net.equip[1].baseAttr[i].key = baseAttrInfo[i][1]
+			net.equip[1].baseAttr[i].value = math.floor(baseAttrInfo[i][2] * baseRate)
+
+
 			if gemBonus then
-				net.equip[1].gemBaseAttr[i].key = itemConfig.base[i][1]
-				net.equip[1].gemBaseAttr[i].value = math.floor(itemConfig.base[i][2] * baseRate * gemBonus.base)
+				net.equip[1].gemBaseAttr[i].key = baseAttrInfo[i][1]
+
+				if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_RING or itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
+					net.equip[1].gemBaseAttr[i].value = math.floor(baseAttrInfo[i][2] * baseRate * gemBonus.sp_base)
+				else
+					net.equip[1].gemBaseAttr[i].value = math.floor(baseAttrInfo[i][2] * baseRate * gemBonus.base)
+				end
 			end
 		end
 
 
-        -- 随机属性
+        -- 洗练属性
         local attrLen = 0
 		net.equip[1].tzAttr = net.equip[1].tzAttr or {}
         if equipGrid then
@@ -189,7 +234,7 @@ function makeItemEquip(net, itemConfig, equipGrid, equipIndex, shuijingAttrID, e
 			for idx, v in ipairs(equipGrid.attr) do
 				net.equip[1].tzAttr[idx] = net.equip[1].tzAttr[idx] or {}
 				net.equip[1].tzAttr[idx].attr.key = v[1]
-				net.equip[1].tzAttr[idx].attr.value = math.floor(v[2] * baseRate)
+				net.equip[1].tzAttr[idx].attr.value = math.floor(v[2] * succinctRate)
 				net.equip[1].tzAttr[idx].color = v[3] or 1
 
 				net.equip[1].tzAttr[0] = idx
@@ -206,18 +251,21 @@ function makeItemEquip(net, itemConfig, equipGrid, equipIndex, shuijingAttrID, e
 				-- end
 
 				for idx, v in ipairs(randomAttr) do
+					attrLen = attrLen + 1
 					net.equip[1].tzAttr[idx] = net.equip[1].tzAttr[idx] or {}
 					net.equip[1].tzAttr[idx].attr.key = v[1]
 					net.equip[1].tzAttr[idx].attr.value = v[2]
 					net.equip[1].tzAttr[idx].color = v[3] or 1
 
-					net.equip[1].tzAttr[0] = idx
+					-- net.equip[1].tzAttr[0] = idx
 				end
 			end
-			-- net.equip[1].tzAttr[0] = attrLen
+			net.equip[1].tzAttr[0] = attrLen
         end
         -- net.equip[1].tzAttr[0] = attrLen
 	end
+
+
 	if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_SHENQI then
 		local shenqiUpNeedConfig = EquipExcel.shenqiUpNeed[net.id]
 		local nextID = shenqiUpNeedConfig and shenqiUpNeedConfig.nextID
@@ -234,29 +282,35 @@ function makeItemEquip(net, itemConfig, equipGrid, equipIndex, shuijingAttrID, e
 		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] = #itemConfig.suitIm
+
 		net.equip[1].suit[1].gemAttr[0] = 0
 		if gemBonus then
 			net.equip[1].suit[1].gemAttr[0] = #itemConfig.suitIm
 		end
-		
-    	for i=1,net.equip[1].suit[1].attr[0] do
+
+		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]
 
-			--宝石
-			if gemBonus and gemBonus[i+1] then
+
+			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]
-				--这里i+1的原因是,装备套装属性配置suitIm中, idx为1的value是2件套加成, idx为2的是3件套加成,以此类推
-				net.equip[1].suit[1].gemAttr[i].value = gemBonus[i+1] * 100	--转成百分比发给客户端
+
+				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
+				else
+					--这里i+1的原因是,装备套装属性配置suitIm中, idx为1的value是2件套加成, idx为2的是3件套加成,以此类推
+					net.equip[1].suit[1].gemAttr[i].value = gemBonus[i+1] * 100	--转成百分比发给客户端
+				end
 			end
 		end
+
 		net.equip[1].suit[1].id = itemConfig.suit
-    	net.equip[1].suit[1].name = itemConfig.suitName
-    	net.equip[1].suit[1].num = itemConfig.suitNum
+		net.equip[1].suit[1].name = itemConfig.suitName
+		net.equip[1].suit[1].num = itemConfig.suitNum
 	end
 	
 	-- 装备职业专属属性

+ 7 - 2
script/module/bag/ItemDefine.lua

@@ -23,8 +23,13 @@ EQUIP_SUBTYPE_WEAPON = 1 		-- 武器
 EQUIP_SUBTYPE_CLOTH = 2 		-- 衣服
 EQUIP_SUBTYPE_SHIPIN = 3 		-- 饰品
 EQUIP_SUBTYPE_SHOES = 4 		-- 鞋子
-EQUIP_SUBTYPE_SHUIJIN = 5 		-- 水晶
-EQUIP_SUBTYPE_SHENQI = 6 		-- 神器
+EQUIP_SUBTYPE_RING = 5			-- 戒指
+EQUIP_SUBTYPE_AMULET = 6		-- 护符
+
+EQUIP_SUBTYPE_SHUIJIN = -1 		-- 水晶(弃用)
+EQUIP_SUBTYPE_SHENQI = -2 		-- 神器(弃用)
+
+
 EQUIP_MAX_CNT = 6				-- 装备最大部位数量
 
 -- 道具子类型

+ 30 - 16
script/module/bag/Proto.lua

@@ -15,7 +15,7 @@ SuitNet = {
 	{"name",     1,       "string"},        -- 套装名
 	{"num",      1,       "short"},         -- 第几件套
 	{"attr",     4,        Attr},           -- 套装性能
-	{"gemAttr",     4,     Attr},           -- 宝石套装加成
+	{"gemAttr",  4,     	Attr},          -- 宝石套装加成
 }
 
 
@@ -25,23 +25,37 @@ EQUIP_WASH_ATTR_DATA = {
 }
 
 
+EQUIP_EFFCECT_DATA = {
+	{"attr",       1,       Attr},  	--属性
+	{"name",       1,       "string"},  -- 特效名字
+	{"color",      1,       "byte"}, 	--品质, 1~5 绿, 蓝, 紫, 橙, 红
+}
+
+EQUIP_EXCLUSIVE_DATA = {
+	{"attr",       1,       Attr},  	--属性
+	{"name",       1,       "string"},  -- 专属英雄名字
+}
+
 
 Equip = {
-    {"uuid",       1,       "string"},   -- 唯一标识
-    {"putUuid",    1,   	"string"},   -- 穿戴者uuid
-    {"index",      1,       "short"},    -- 位置索引
-	{"level",      1,   	"byte"},     -- 等级:星级
-	{"exp",        1,       "int"},   	 -- 神器的经验值
-    {"star",       1,   	"byte"},     -- 穿戴星级
-	{"baseAttr",   4,       Attr},    	 -- 基础性能
-    {"tzAttr",     5,       EQUIP_WASH_ATTR_DATA}, -- 拓展属性
-	{"suit",       2,       SuitNet},    -- 套装信息
-	{"job",        1,       "byte"},     -- 职业专属
-	{"jobAttr",    10,      Attr},    	 -- 职业专属属性
-	{"camp",       1,       "byte"},     -- 阵营专属
-	{"campAttr",   2,       Attr},       -- 阵营专属属性
-	{"args",	   2,		"int"},		 -- 额外参数 如果是水晶的话,第一个位表示是否满级
-	{"gemBaseAttr",4,		Attr},		 -- 宝石基础加成
+    {"uuid",       		1,       "string"},   		-- 唯一标识
+    {"putUuid",    		1,   	"string"},   		-- 穿戴者uuid
+    {"index",      		1,       "short"},    		-- 位置索引
+	{"level",      		1,   	"byte"},     		-- 等级:星级
+	{"exp",        		1,       "int"},   	 		-- 神器的经验值
+    {"star",       		1,   	"byte"},     		-- 穿戴星级
+	{"baseAttr",   		4,       Attr},    	 		-- 基础性能
+    {"tzAttr",     		5,       EQUIP_WASH_ATTR_DATA}, -- 拓展属性
+	{"suit",       		2,       SuitNet},    		-- 套装信息
+	{"job",        		1,       "byte"},     		-- 职业专属
+	{"jobAttr",    		10,      Attr},    	 		-- 职业专属属性
+	{"camp",       		1,       "byte"},     		-- 阵营专属
+	{"campAttr",   		2,       Attr},       		-- 阵营专属属性
+	{"args",	   		2,		"int"},		 		-- 额外参数 如果是水晶的话,第一个位表示是否满级
+	{"gemBaseAttr",		4,		Attr},		 		-- 宝石基础加成
+	{"effects",	   		3,		EQUIP_EFFCECT_DATA},-- 特效(戒指、护符专属)
+	{"heroExclusive",	1,		"string"},			-- 英雄专属(戒指、护符专属)
+	{"suitID",       	1,   	"int"},     		-- 套装编号
 }
 
 FuwenSkillInfo = {

+ 164 - 19
script/module/equip/EquipLogic.lua

@@ -15,6 +15,8 @@ local MailExcel = require("excel.mail")
 local HeroLogic = require("hero.HeroLogic")
 local TriggerDefine = require("trigger.TriggerDefine")
 local TriggerLogic = require("trigger.TriggerLogic")
+local effectCfg = require("excel.equip").texiao
+local HeroDefine = require("hero.HeroDefine")
 
 EQUIP_BAG_MAX_CNT = 500
 EQUIP_BAG_OP_ADD = 1 -- 增
@@ -27,6 +29,9 @@ EQUIP_QUALITY_WEIGHT = 10000
 EQUIP_QUALITY_BASE_RATE = { 7000, 8000, 9000, 10000, 12000 }
 
 
+local EQUIP_HEROEXCLUSIVE_WEIGHT = 4000         --戒指、护符随机出英雄专属属性权重
+local EQUIP_NO_HEROEXCLUSIVE_WEIGHT = 6000      --戒指、护符随不出英雄专属属性权重
+
 -- 转换装备洗练数据格式
 function AttrHashToArray(attrData)
     local _,  attrInfo = next(attrData)
@@ -147,6 +152,122 @@ local function randAttrArray(randomAttrCfg, equipColor)
     return attr
 end
 
+---------------------------------------------------------戒指、护符随机特效---------------------------------------------------
+
+local function generateRandData(excludeTypeList)
+    local totalWeight = 0
+    local type2List = {}
+
+    for k,v in ipairs(effectCfg) do
+        local tp = v.type
+        if not excludeTypeList or not excludeTypeList[tp] then
+            local weight = v.weight
+            type2List[tp] = type2List[tp] or {weight = 0, typeList = {}}
+            type2List[tp].weight = type2List[tp].weight + weight
+            table.insert(type2List[tp].typeList, {id = k, weight = weight})
+            totalWeight = totalWeight + weight
+        end
+    end
+
+    local len = 0
+    local randList = {}
+    for _, tpData in pairs(type2List) do
+        len = len + 1
+        randList[len] = tpData
+    end
+
+    return totalWeight, randList
+end
+
+local function getIndexByRand(totalWeight, randList)
+    local tpList
+    local weight = 0
+    local randWeight = math.random(0, totalWeight)
+    for _,v in ipairs(randList) do
+        weight = weight + v.weight
+        if randWeight <= weight then
+            tpList = v
+            break
+        end
+    end
+
+    weight = 0
+    randWeight = math.random(0, tpList.weight)
+    for _,v in ipairs(tpList.typeList) do
+        weight = weight + v.weight
+        if randWeight <= weight then
+            return v.id
+        end
+    end
+end
+
+-- 随机出戒指、护符的特效
+local function randEffectAttrList(equipId)
+    local equipCfg = EquipExcel[equipId]
+
+    if equipCfg.subType ~= ItemDefine.EQUIP_SUBTYPE_RING and equipCfg.subType ~= ItemDefine.EQUIP_SUBTYPE_AMULET then
+        return
+    end
+
+    local excludeTypeList
+    local noEffectTimes = 0
+    local effectList = {}
+    for i=1, 3 do
+        local totalWeight, randList = generateRandData(excludeTypeList)
+        local effctId = getIndexByRand(totalWeight, randList)
+
+        if effctId == 1 then
+            noEffectTimes = noEffectTimes + 1
+        else
+            effectList[effctId] = 1
+            excludeTypeList = excludeTypeList or {}
+
+            local excludeType = effectCfg[effctId].type
+            excludeTypeList[excludeType] = 1
+        end
+
+        -- 保底要有一条特效
+        if noEffectTimes >= 2 then
+            excludeTypeList = excludeTypeList or {}
+            local excludeType = effectCfg[1].type
+            excludeTypeList[excludeType] = 1
+        end
+    end
+
+    return effectList
+end
+
+--------------------------------------------------------------------------------------------------------------------------------
+
+
+
+---------------------------------------------------------戒指、护符随机英雄专属---------------------------------------------------
+
+
+local function randHeroExclusive(equipId)
+    local equipCfg = EquipExcel[equipId]
+
+    if equipCfg.subType ~= ItemDefine.EQUIP_SUBTYPE_RING and equipCfg.subType ~= ItemDefine.EQUIP_SUBTYPE_AMULET then
+        return
+    end
+
+    local randWeight = math.random(0, (EQUIP_HEROEXCLUSIVE_WEIGHT + EQUIP_NO_HEROEXCLUSIVE_WEIGHT))
+    if randWeight > EQUIP_HEROEXCLUSIVE_WEIGHT then
+        return
+    end
+
+    local heroList = HeroDefine.GetAllHighQualityHero()
+    local len = #heroList
+    if len <= 0 then
+        return
+    end
+
+    local idx = math.random(1, len)
+    return heroList[idx]
+end
+
+--------------------------------------------------------------------------------------------------------------------------------
+
 
 
 -- 随机属性
@@ -285,15 +406,20 @@ function getEquipMaxQuality(equipConfig)
     return maxQuality
 end
 
--- 获取装备附加属性
+-- 获取装备洗练属性
 function getEquipTzAttr(equipConfig)
-    -- if not equipConfig.randomAttr then return end
-    -- if equipConfig.random == 1 then
-    --    return equipConfig.randomAttr
+    if not equipConfig.randomAttr then return end
+    if equipConfig.random == 1 then
+       return equipConfig.randomAttr
+    end
+    -- local quality
+    -- if equipConfig.subType == ItemDefine.EQUIP_SUBTYPE_RING or equipConfig.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
+    --     quality = equipConfig.quality
     -- end
-    local attr = randAttrArray(Util.copyTable(equipConfig.randomAttr))
 
-    return attr
+    -- local attr = randAttrArray(Util.copyTable(equipConfig.randomAttr), quality)
+
+    -- return attr
 end
 
 -- 返回装备背包空余格子数
@@ -423,26 +549,45 @@ end
 
 -- 制造一个装备
 function makeEquip(itemID, otherData)
-   local equipGrid = EquipLogicGrid.createGrid(itemID)
-   if not equipGrid then return end
-
-   -- 随机属性
-   local attr, quality = randomAttr(itemID, nil, otherData)
-   equipGrid.attr = attr
-   equipGrid.quality = quality
-   checkAttr(equipGrid)
-   return equipGrid
+    local equipGrid = EquipLogicGrid.createGrid(itemID)
+    if not equipGrid then return end
+
+    local bl = false
+    local equipCfg = EquipExcel[equipGrid.id]
+    if equipCfg.subType == ItemDefine.EQUIP_SUBTYPE_RING or equipCfg.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
+        otherData = equipCfg.quality
+        bl = true
+    end
+
+    -- 随机洗练属性
+    local attr, quality = randomAttr(itemID, nil, otherData)
+    equipGrid.attr = attr
+
+
+    if not bl then
+        equipGrid.quality = quality
+    else
+        -- 装备特效
+        equipGrid.effectList = randEffectAttrList(itemID)
+
+        -- 英雄专属
+        equipGrid.exclusiveHeroId = randHeroExclusive(itemID)
+    end
+
+
+    checkAttr(equipGrid)
+    return equipGrid
 end
 
 -- 添加装备
 function addEquip(human, itemID, itemCnt, logType, otherData)
     if not EquipExcel[itemID] then return end
-   
+
     for i = 1, itemCnt do
         local equipGrid = makeEquip(itemID, otherData)
         if equipGrid then
-           addByEquipGrid(human, equipGrid, logType)
-           TriggerLogic.PublishEvent(TriggerDefine.EQUIP_GETQUALITY, human.db._id, equipGrid.quality, 1)
+            addByEquipGrid(human, equipGrid, logType)
+            TriggerLogic.PublishEvent(TriggerDefine.EQUIP_GETQUALITY, human.db._id, equipGrid.quality, 1)
         end
     end
 end
@@ -485,7 +630,7 @@ function delEquip(human, index, logType, sendNotify)
     human.db.equipBag[index] = nil
 
     if not sendNotify then
-       sendEquipChange(human, index, nil, EQUIP_BAG_OP_DEL)
+        sendEquipChange(human, index, nil, EQUIP_BAG_OP_DEL)
     end
 end
 

+ 27 - 2
script/module/equip/EquipLogicGrid.lua

@@ -5,7 +5,8 @@ local lua_mongo = _G.lua_mongo
 -- local ItemDefine = require("bag.ItemDefine")
 local EquipExcel = require("excel.equip").equip
 -- local EquipLogic = require("equip.EquipLogic")
-
+local ItemDefine = require("bag.ItemDefine")
+local Util = require("common.Util")
 
 -- 装备品质
 EQUIP_COLOR_1 = 1   -- 绿
@@ -33,11 +34,27 @@ EQUIPWASH_COLOR_MUL = {
 }
 
 
+-- 生成戒指、护符的基础属性的最终值
+local function generateNewBaseAttr(equipId)
+   local equipCfg = EquipExcel[equipId]
+   local baseAttr = Util.copyTable(equipCfg.base)
+   local randMul = math.random(equipCfg.randomseed[1][1], equipCfg.randomseed[1][2])
+
+   for _, attrInfo in ipairs(baseAttr) do
+      attrInfo[2] = math.floor(attrInfo[2] * randMul / 100)
+   end
+
+   return baseAttr
+end
+
+
+
 
 
 -- 创建装备
 function createGrid(id)
-   if not EquipExcel[id] then 
+   local equipCfg = EquipExcel[id]
+   if not equipCfg then
       assert() 
       return 
    end
@@ -51,6 +68,14 @@ function createGrid(id)
    equip.putUuid = nil              --装备者
    equip.washAttr = nil             --当前洗练属性
    equip.washQuality = nil          --当前洗练品质
+
+   if equipCfg.subType == ItemDefine.EQUIP_SUBTYPE_RING or equipCfg.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
+      equip.quality = equipCfg.quality
+
+      equip.baseAttr = generateNewBaseAttr(id)
+   end
+
+
    return equip
 end
 

+ 9 - 0
script/module/hecheng/EquipHechengLogic.lua

@@ -56,6 +56,10 @@ end
 
 -- 装备合成信息查询
 function equipHechengQuery(human, pos)
+    if pos == ItemDefine.EQUIP_SUBTYPE_RING or pos == EQUIP_SUBTYPE_AMULET then
+        return
+    end
+
 	if pos == 0 then
 		for i = ItemDefine.EQUIP_SUBTYPE_WEAPON, ItemDefine.EQUIP_SUBTYPE_SHIPIN do
 			sendQuery(human, i)
@@ -102,6 +106,11 @@ function equipHechengDo(human, id, indexList)
         if grid.quality ~= EQUIP_HECHENG_QUALITY then
             return Broadcast.sendErr(human, Util.format(Lang.EQUIP_HECHENG_QUALITY_ERROR, EQUIP_HECHENG_QUALITY))
         end
+
+        local equipCfg = EquipExcel.equip[grid.id]
+        if equipCfg.subType == ItemDefine.EQUIP_SUBTYPE_RING or equipCfg.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
+            return
+        end
     end
 
     -- 判断消耗

+ 1 - 1
script/module/hero/Handler.lua

@@ -95,7 +95,7 @@ end
 
 -- 一键穿装
 function CG_HERO_EQUIP_PUTON_QUICK(human, msg)
-	HeroEquip.putOnQuick(human, msg.heroID, msg.heroIndex, msg.equipID1, msg.equipID2, msg.equipID3, msg.equipID4, msg.equipID6)
+	HeroEquip.putOnQuick(human, msg.heroID, msg.heroIndex, msg.equipID1, msg.equipID2, msg.equipID3, msg.equipID4, msg.equipID5, msg.equipID6)
 end
 
 -- 一键脱装

+ 16 - 1
script/module/hero/HeroDefine.lua

@@ -28,7 +28,7 @@ HEROJOBTOGEM = {
 }
 
 --英雄镶嵌宝石的最大孔位
-HEROGEMMAX = 4
+HEROGEMMAX = 6
 
 
 WEIGHTLV2HEROS = {}
@@ -200,4 +200,19 @@ function getTujianMaxValue(key)
 		end
 	end
 	return TUJIAN_KEY_2_MAXVALUE[key] or 0
+end
+
+
+-- 获取所有SSR,UR英雄ID
+function GetAllHighQualityHero()
+    local len = 0
+    local heroIdList = {}
+    for heroId, heroInfo in pairs(HeroExcel) do
+        if heroInfo.grade >= HERO_SSR_GRADE and heroId >= 101001 then
+            len = len + 1
+            heroIdList[len] = heroId
+        end
+    end
+
+    return heroIdList
 end

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

@@ -256,7 +256,7 @@ function putOff(human, heroID, heroIndex, pos, noCalc, noSend)
 end
 
 -- 一键穿装
-function putOnQuick(human, heroID, heroIndex, equipID1, equipID2, equipID3, equipID4, equipID6)
+function putOnQuick(human, heroID, heroIndex, equipID1, equipID2, equipID3, equipID4, equipID5, equipID6)
 	local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
 	if heroGrid == nil then
 		return
@@ -266,6 +266,7 @@ function putOnQuick(human, heroID, heroIndex, equipID1, equipID2, equipID3, equi
 	putOn(human, heroID, heroIndex, equipID2, true)
 	putOn(human, heroID, heroIndex, equipID3, true)
 	putOn(human, heroID, heroIndex, equipID4, true)
+	putOn(human, heroID, heroIndex, equipID5, true)
 	putOn(human, heroID, heroIndex, equipID6, true)
 	ObjHuman.doCalcHero(human,heroIndex)
 	HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex)
@@ -283,7 +284,10 @@ function putOffQuick(human, heroID, heroIndex, noSendDy)
 	putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_CLOTH, true)
 	putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_SHOES, true)
 	putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_SHIPIN, true)
-	putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_SHENQI, true)	
+	-- putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_SHENQI, true)	
+
+	putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_RING, true)
+	putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_AMULET, true)
 	
     if not noSendDy then
        ObjHuman.doCalcHero(human,heroIndex)
@@ -306,25 +310,47 @@ function doCalcHero(obj,attrs)
             local equipID = equipGrid.id	
 			local equipConfig = EquipExcel.equip[equipID]
             local baseRate = EquipLogic.getEquipBaseRate(equipGrid.quality)
-
+			local succinctRate = baseRate
             -- 水晶
 			if equipConfig.subType == ItemDefine.EQUIP_SUBTYPE_SHUIJIN then
 				for _,v in ipairs(EquipExcel.shuijingAttr[obj.shuijingAttrID].attr) do
 					RoleAttr.updateValue(v[1],v[2],attrs)
 				end
 			else
+
+				local baseAttrs = equipConfig.base
+
+
+				-- 戒指、护符
+				if equipConfig.subType == ItemDefine.EQUIP_SUBTYPE_RING or equipConfig.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
+					baseRate = 1
+					baseAttrs = equipGrid.baseAttr
+
+					-- 特效
+					for effectId in pairs(equipGrid.effectList) do
+						local effectAttrs = EquipExcel.texiao[effectId].attrs
+						RoleAttr.updateValue(effectAttrs[1][1], effectAttrs[1][2], attrs)
+					end
+
+					-- 英雄专属
+					if equipGrid.exclusiveHeroId and obj.id == equipGrid.exclusiveHeroId then
+						baseRate = 2
+					end
+				end
+
+
 				--装备基础属性
-				for _,v in ipairs(equipConfig.base) do
+				for _,v in ipairs(baseAttrs) do
 					RoleAttr.updateValue(v[1],mathFloor(v[2] * baseRate * (1 + (suitBonusTbl and suitBonusTbl.base or 0))),attrs)
 				end
 
-                -- 随机属性
+                -- 洗练属性
                 -- for key, value in pairs(equipGrid.attr) do
 				-- 	RoleAttr.updateValue(key, mathFloor(value * baseRate) ,attrs)
 				-- end
 
 				for _, attrData in ipairs(equipGrid.attr) do
-					RoleAttr.updateValue(attrData[1], mathFloor(attrData[2] * baseRate) ,attrs)
+					RoleAttr.updateValue(attrData[1], mathFloor(attrData[2] * succinctRate) ,attrs)
 				end
 				
 				local heroID = obj.id

+ 13 - 2
script/module/hero/HeroGem.lua

@@ -14,9 +14,15 @@ local HeroDefine = require("hero.HeroDefine")
 local MAXGEMLEVEL = 10
 
 
---一级宝石对装备基础属性的加成
+--一级宝石对普通装备基础属性的加成
 local BASEBONUS = 0.05
 
+-- 一级宝石对戒指、护符基础属性的加成
+local SPE_EQUIP_BASEBONUS = 0.05
+
+-- 一级宝石对戒指、护符套装属性的加成
+local SPE_EQUIP_SUITBONUS = 0.001
+
 --一级宝石对装备套装效果的加成,key为套装,value为加成比例
 local GEMTOEQUIPATTR = {
     [2] = 0.0025,
@@ -101,6 +107,11 @@ function suitAttrBonus(heroGrid)
         end
         --基础属性
         t.base = BASEBONUS * sumLevel
+
+        -- 戒指, 护符加成
+        t.sp_base = SPE_EQUIP_BASEBONUS * sumLevel
+        t.sp_suit = SPE_EQUIP_SUITBONUS * sumLevel
+
         return t
     end
 end
@@ -205,7 +216,7 @@ function upgradeGem(human, heroID, heroIndex, pos)
 
     --通知客户端
     local msgRet = Msg.gc.GC_HERO_GEM_UPGRADEGEM
-    msgRet.gemData[0] = HeroDefine.HEROGEMMAX
+    -- msgRet.gemData[0] = HeroDefine.HEROGEMMAX
     assembleData(gemData, msgRet.gemData, heroCfg.job, pos)
     Msg.send(msgRet, human.fd)
 

+ 3 - 2
script/module/hero/Proto.lua

@@ -95,7 +95,7 @@ HeroSimple = {
     {"isGongMing",  1,       "byte"},   -- 是否共鸣 
     {"general",     2,      HeroGeneral},   -- 通用信息 
     {"xLv",        	1,      "int"},   	 --xLv 初始值0
-	{"gemData",     5,     GemData},   -- 宝石
+	{"gemData",     6,     GemData},   -- 宝石
 	{"relic",       1,      relic}     --遗物
 }
 
@@ -478,7 +478,8 @@ CG_HERO_EQUIP_PUTON_QUICK = {
 	{"equipID2",		1,		"int"}, -- 部位2
 	{"equipID3",		1,		"int"}, -- 部位3  
 	{"equipID4",		1,		"int"}, -- 部位4
-	{"equipID6",		1,		"int"}, -- 部位6神器
+	{"equipID5",		1,		"int"},	-- 部位5, 戒指
+	{"equipID6",		1,		"int"}, -- 部位6, 护符
 }
 
 -- 一键脱装

+ 3 - 1
script/module/role/NewLogic.lua

@@ -452,7 +452,9 @@ function NewProto(human, type, param)
                 HeroEquip.putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_CLOTH, false, true)
                 HeroEquip.putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_SHOES, false, true)
                 HeroEquip.putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_SHIPIN, false, true)
-                HeroEquip.putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_SHENQI, false, true)
+                -- HeroEquip.putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_SHENQI, false, true)
+                HeroEquip.putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_RING, false, true)
+                HeroEquip.putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_AMULET, false, true)
 
                 --脱符文
                 FuwenLogic.putOff(human, heroID, heroIndex, 1, false, true)