Răsfoiți Sursa

1.装备洗练属性增加锁定/解锁功能 2.未选择的洗练属性增加取消功能

gitxsm 9 luni în urmă
părinte
comite
1c5d68a882

+ 2 - 1
script/common/ProtoID.lua

@@ -1499,4 +1499,5 @@ _ENV[1549]="GC_ONEKILLGIFT_QUERY"
 _ENV[1550]="GC_ONEKILLGIFT_CLOSE"
 
 
--- _ENV[1553]="CG_EQUIP_ATTR_LOCK"
+_ENV[1553]="CG_EQUIP_ATTR_LOCK"
+_ENV[1554]="CG_EQUIP_RETUN_RANDOM_ATTR"

+ 2 - 0
script/module/bag/Grid.lua

@@ -239,6 +239,7 @@ function makeItemEquip(net, itemConfig, equipGrid, equipIndex, shuijingAttrID, e
 				net.equip[1].tzAttr[idx].attr.key = v[1]
 				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[idx].lock = v[4] or 0
 
 				net.equip[1].tzAttr[0] = idx
 			end
@@ -259,6 +260,7 @@ function makeItemEquip(net, itemConfig, equipGrid, equipIndex, shuijingAttrID, e
 					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[idx].lock = v[4] or 0
 
 					-- net.equip[1].tzAttr[0] = idx
 				end

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

@@ -22,6 +22,7 @@ SuitNet = {
 EQUIP_WASH_ATTR_DATA = {
 	{"attr",       1,       Attr},  --属性
 	{"color",      1,       "byte"}, --品质, 1~5 绿, 蓝, 紫, 橙, 红
+	{"lock",       1,       "byte"}, -- 是否锁定,0-未锁定,1锁定
 }
 
 

+ 14 - 3
script/module/equip/EquipLogic.lua

@@ -95,10 +95,21 @@ end
 
 
 -- 随机出装备洗练属性
-local function randAttrArray(randomAttrCfg, equipColor)
+local function randAttrArray(randomAttrCfg, equipColor, excludeAttrList)
     --品质
     equipColor = equipColor or randColor(randomAttrCfg)
 
+    -- 排除特定属性
+    if excludeAttrList then
+        for idx, attrInfo in pairs(randomAttrCfg) do
+            local attrType = attrInfo[1]
+            if excludeAttrList[attrType] then
+                randomAttrCfg[idx] = nil
+            end
+        end
+    end
+
+
     -- 计算总权重
     local totalWeight = 0
     for k, v in pairs(randomAttrCfg) do
@@ -302,7 +313,7 @@ function checkAttr(equipGrid)
 end
 
 -- 随机属性
-function randomAttr(itemID, isRandom, otherData)
+function randomAttr(itemID, isRandom, otherData, excludeAttrList)
     local equipConfig = EquipExcel[itemID]
     if not equipConfig then return end
 
@@ -370,7 +381,7 @@ function randomAttr(itemID, isRandom, otherData)
     --     end
     -- end
 
-    local attr = randAttrArray(randomAttr, quality)
+    local attr = randAttrArray(randomAttr, quality, excludeAttrList)
 
     return attr, quality
 end

+ 142 - 3
script/module/equip/EquipWash.lua

@@ -33,6 +33,26 @@ local function getEquipGrid(human, bagIndex, heroUuid, pos)
     return equipGrid, nil, nil
 end
 
+-- 获得装备洗练数据中被锁定属性的数量, 索引...
+local function getEquipLockAttrInfo(equipGrid)
+    if not equipGrid or not equipGrid.attr or #equipGrid.attr <= 1 then
+        return
+    end
+
+    local num = 0
+    local idxList = {}
+
+    for idx, attrInfo in ipairs(equipGrid.attr) do
+        if attrInfo[4] and attrInfo[4] == 1 then
+            num = num + 1
+            idxList[idx] = idx
+        end
+    end
+
+    return num, idxList
+end
+
+
 
 -- 查询装备图鉴 全部信息
 function fenjieQuey(human, inputList)
@@ -128,6 +148,9 @@ function randomQuery(human, bagIndex, heroUuid, pos)
     local rareExcel = EquipRareExcel[equipGrid.quality]
     if not rareExcel then return end
 
+
+    local attrLockNum = getEquipLockAttrInfo(equipGrid)
+
     local msgRet = Msg.gc.GC_EQUIP_RAMDOM_QUERY
     Grid.makeItem(msgRet.equipOld, equipGrid.id, 1, nil, equipGrid, bagIndex)
 
@@ -143,7 +166,14 @@ function randomQuery(human, bagIndex, heroUuid, pos)
 
     msgRet.needItem[0] = #rareExcel.rebirth
     for i = 1, msgRet.needItem[0] do
-       Grid.makeItem(msgRet.needItem[i], rareExcel.rebirth[i][1], rareExcel.rebirth[i][2])
+        -- Grid.makeItem(msgRet.needItem[i], rareExcel.rebirth[i][1], rareExcel.rebirth[i][2])
+
+        local itemCnt = rareExcel.rebirth[i][2]
+        if attrLockNum and attrLockNum > 0 then
+            itemCnt = itemCnt * (attrLockNum + 1)
+        end
+
+        Grid.makeItem(msgRet.needItem[i], rareExcel.rebirth[i][1], itemCnt)
     end
 
     Msg.send(msgRet, human.fd)
@@ -209,9 +239,16 @@ function randomDo(human, bagIndex, heroUuid, pos)
     local rareExcel = EquipRareExcel[equipGrid.quality]
     if not rareExcel then return end
 
+    local attrLockNum, idxList = getEquipLockAttrInfo(equipGrid)
+
     for i = 1, #rareExcel.rebirth do
        local needItemID = rareExcel.rebirth[i][1]
        local needItemCnt = rareExcel.rebirth[i][2]
+
+        if attrLockNum and attrLockNum > 0 then
+            needItemCnt = needItemCnt * (attrLockNum + 1)
+        end
+
        local nowItemCnt = BagLogic.getItemCnt(human, needItemID)
 	   if nowItemCnt < needItemCnt then 
 	   	  return Broadcast.sendErr(human, Util.format(Lang.XIANZHI_NO_ITEM, ItemDefine.getValue(needItemID,"name")))
@@ -221,11 +258,38 @@ function randomDo(human, bagIndex, heroUuid, pos)
     for i = 1, #rareExcel.rebirth do
        local needItemID = rareExcel.rebirth[i][1]
        local needItemCnt = rareExcel.rebirth[i][2]
+
+        if attrLockNum and attrLockNum > 0 then
+            needItemCnt = needItemCnt * (attrLockNum + 1)
+        end
+
        BagLogic.delItem(human, needItemID, needItemCnt, "equip_wash")
     end
     
 
-    local attr, quality = EquipLogic.randomAttr(equipGrid.id, true, equipGrid.quality)
+    local excludeAttrList
+    if idxList then
+        excludeAttrList = {}
+        for idx in pairs(idxList) do
+            local attrType = equipGrid.attr[idx] and equipGrid.attr[idx][1]
+            if attrType then
+                excludeAttrList[attrType] = 1
+            end
+        end
+    end
+
+
+    local attr, quality = EquipLogic.randomAttr(equipGrid.id, true, equipGrid.quality, excludeAttrList)
+
+    for idx in pairs(idxList or {}) do
+        if attr[idx] and equipGrid.attr[idx] then
+            attr[idx][1] = equipGrid.attr[idx][1] -- attrType
+            attr[idx][2] = equipGrid.attr[idx][2] -- attrValue
+            attr[idx][3] = equipGrid.attr[idx][3] -- color
+        end
+    end
+
+
     equipGrid.washAttr = attr
     equipGrid.washQuality = quality
 
@@ -246,7 +310,15 @@ function randomSave(human, bagIndex, heroUuid, pos)
     local washQuality = equipGrid.washQuality
     if not washAttr or not washQuality then return end
 
-    equipGrid.attr = washAttr
+    -- equipGrid.attr = washAttr
+
+    local _, idxList = getEquipLockAttrInfo(equipGrid)
+    for idx, attrInfo in ipairs(washAttr) do
+        if not idxList or not idxList[idx] then
+            equipGrid.attr[idx] = attrInfo
+        end
+    end
+
     equipGrid.quality = washQuality
     equipGrid.washAttr = nil
     equipGrid.washQuality = nil
@@ -267,4 +339,71 @@ function randomSave(human, bagIndex, heroUuid, pos)
         ObjHuman.doCalcHero(human, heroIndex)
         HeroLogic.sendHeroBagDynamic(human, heroGrid.id, heroIndex)
     end
+end
+
+
+-- 锁定/解锁装备洗练属性
+function LockEquipAttr(human, bagIndex, heroUuid, pos, opType, attrIdx)
+    if opType ~= 0 and opType ~= 1 then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    local equipGrid = getEquipGrid(human, bagIndex, heroUuid, pos)
+    if not equipGrid then
+        return Broadcast.sendErr(human, Lang.EQUIP_GRID_ERR)
+    end
+
+    if not equipGrid.attr or #equipGrid.attr <= 1 then
+        return Broadcast.sendErr(human, Lang.EQUIP_ATTR_CANNOT_LOCK)
+    end
+
+    -- 洗练结束才能锁定
+    if equipGrid.washAttr then
+        return Broadcast.sendErr(human, Lang.EQUIP_ATTR_CANNOT_LOCK)
+    end
+    
+
+    if not equipGrid.attr[attrIdx] then
+        return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
+    end
+
+    local attrLockNum, idxList = getEquipLockAttrInfo(equipGrid)
+
+    if not attrLockNum then
+        Broadcast.sendErr(human, Lang.EQUIP_ATTR_CANNOT_LOCK)
+    end
+
+    if opType == 1 then
+        if attrLockNum + 1 >= #equipGrid.attr then
+            return Broadcast.sendErr(human, Lang.EQUIP_ATTR_CANNOT_LOCK_ALL)
+        end
+
+        if idxList[attrIdx] then
+            return Broadcast.sendErr(human, Lang.EQUIP_ATTR_LOCKED)
+        end
+    else
+        if not idxList[attrIdx] then
+            return Broadcast.sendErr(human, Lang.EQUIP_ATTR_UNLOCK)
+        end
+    end
+
+    -- 更新数据
+    equipGrid.attr[attrIdx][4] = opType
+
+    -- 推送数据给客户端
+    randomQuery(human, bagIndex, heroUuid, pos)
+end
+
+
+-- 取消装备未选择的洗练属性
+function CancelEquipRandomAttr(human, bagIndex, heroUuid, pos)
+    local equipGrid = getEquipGrid(human, bagIndex, heroUuid, pos)
+    if not equipGrid then
+        return Broadcast.sendErr(human, Lang.EQUIP_GRID_ERR)
+    end
+
+    equipGrid.washAttr = nil
+    equipGrid.washQuality = nil
+
+    randomQuery(human, bagIndex, heroUuid, pos)
 end

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

@@ -39,4 +39,14 @@ end
 -- 已装备的装备
 function CG_EQUIP_PUT_LIST(human, msg)
    EquipWash.putList(human, msg.pos)
+end
+
+-- 装备洗练属性锁定/解锁
+function CG_EQUIP_ATTR_LOCK(human, msg)
+   EquipWash.LockEquipAttr(human, msg.bagIndex, msg.heroUuid, msg.pos, msg.opType, msg.attrIdx)
+end
+
+-- 取消装备未选择的洗练属性
+function CG_EQUIP_RETUN_RANDOM_ATTR(human, msg)
+   EquipWash.CancelEquipRandomAttr(human, msg.bagIndex, msg.heroUuid, msg.pos)
 end

+ 17 - 0
script/module/equip/Proto.lua

@@ -86,4 +86,21 @@ CG_EQUIP_RAMDOM_SAVE = {
     {"bagIndex", 1, "int"},
     {"heroUuid", 1, "string"},
     {"pos",      1, "byte"},
+}
+
+
+-- 锁定/解锁洗练属性
+CG_EQUIP_ATTR_LOCK = {
+    {"bagIndex",    1,  "int"},
+    {"heroUuid",    1,  "string"},
+    {"pos",         1,  "byte"},
+    {"opType",      1,  "byte"},    -- 操作类型, 0- 解锁 1- 锁定
+    {"attrIdx",     1,  "byte"},    -- 属性索引
+}
+
+-- 取消未选择的新洗练属性
+CG_EQUIP_RETUN_RANDOM_ATTR = {
+    {"bagIndex",    1,  "int"},
+    {"heroUuid",    1,  "string"},
+    {"pos",         1,  "byte"},
 }