-- 英雄装备相关逻辑 local Lang = require("common.Lang") local HeroExcel = require("excel.hero") local EquipExcel = require("excel.equip") local Msg = require("core.Msg") local ObjHuman = require("core.ObjHuman") local HeroDefine = require("hero.HeroDefine") local HeroLogic = require("hero.HeroLogic") local ItemDefine = require("bag.ItemDefine") local Grid = require("bag.Grid") local BagLogic = require("bag.BagLogic") local Broadcast = require("broadcast.Broadcast") local RoleAttr = require("role.RoleAttr") local Util = require("common.Util") local ItemExcel = require("excel.item").item local FuwenLogic = require("fuwen.FuwenLogic") local EquipLogic = require("equip.EquipLogic") function query(human, heroID, heroIndex) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end local msgRet = Msg.gc.GC_HERO_EQUIP_QUERY msgRet.id = heroID msgRet.index = heroIndex local cnt = 0 for i = 1, ItemDefine.EQUIP_MAX_CNT do local equipGrid = heroGrid.equip and heroGrid.equip[i] if equipGrid then cnt = cnt + 1 if i == ItemDefine.EQUIP_SUBTYPE_SHUIJIN then -- 水晶比较特殊 Grid.makeItem(msgRet.equips[cnt], equipGrid.id, 1, heroGrid.shuijingAttrID) else Grid.makeItem(msgRet.equips[cnt], equipGrid.id, 1, nil, equipGrid, -1, Grid.getOpflagAtBag(heroGrid.equip[i].id)) end end local dot = isEquipDotByPos(human, heroGrid, i) msgRet.equipDot[i] = dot or 0 end msgRet.equipDot[0] = ItemDefine.EQUIP_MAX_CNT msgRet.equips[0] = cnt cnt = 0 for i = 1, 2 do -- 尝试解锁符文 FuwenLogic.fuwenGridUnlock(human, heroID, heroIndex, i) if heroGrid.fuwen and heroGrid.fuwen[i] and 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)) end msgRet.fuwenGrid[i] = 1 if heroGrid.fuwen == nil or heroGrid.fuwen[i] == nil then msgRet.fuwenGrid[i] = 0 end local dot = FuwenLogic.isFuwenDotByPos(human, heroGrid, i) == true and 1 or 0 msgRet.fuwenDot[i] = dot end msgRet.fuwenGrid[0] = 2 msgRet.fuwenDot[0] = 2 msgRet.fuwens[0] = cnt Msg.send(msgRet, human.fd) end function putOn(human, heroID, heroIndex, bagIndex, noCalc) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end if bagIndex == 0 then return end local equipGrid = human.db.equipBag[bagIndex] if not equipGrid or type(equipGrid) ~= "table" then return end local equipID = equipGrid.id local equipConfig = EquipExcel.equip[equipID] if equipConfig == nil then return end if heroGrid.star < equipConfig.star then local errDesc = Util.format(Lang.EQUIP_PUT_ON_STAR_ERR, equipConfig.star) return Broadcast.sendErr(human, errDesc) end local pos = equipConfig.subType if pos == ItemDefine.EQUIP_SUBTYPE_SHUIJIN then return end local msgRet = Msg.gc.GC_HERO_EQUIP_PUTON msgRet.heroID = heroID msgRet.heroIndex = heroIndex Grid.makeItem(msgRet.equip, equipID, 1, nil, equipGrid, bagIndex, Grid.getOpflagAtBag(equipID)) if heroGrid.equip == nil or heroGrid.equip[pos] == nil then heroGrid.equip = heroGrid.equip or { } heroGrid.equip[pos] = equipGrid -- 穿戴者 equipGrid.putUuid = heroGrid.uuid -- 新穿装备 EquipLogic.delEquip(human, bagIndex, "equip_puton") else -- 同一件装备 if heroGrid.equip[pos].uuid == equipGrid.uuid then return Msg.send(msgRet, human.fd) end -- 替换装备 EquipLogic.delEquip(human, bagIndex, "equip_puton") local unEquipGrid = heroGrid.equip[pos] unEquipGrid.putUuid = nil EquipLogic.addByEquipGrid(human, unEquipGrid, "equip_puton", true) heroGrid.equip[pos] = equipGrid equipGrid.putUuid = heroGrid.uuid end if noCalc ~= true then -- 计算属性 ObjHuman.doCalcHero(human, heroIndex) HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex) HeroLogic.refreshDot(human, heroGrid.uuid) end -- 通知客户端 Msg.send(msgRet, human.fd) end -- function putOnHero(human, heroID, heroIndex, putHeroID, putHeroIndex, putHeroPos) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end local putHeroGrid = HeroLogic.getHeroGrid(human, putHeroID, putHeroIndex) if putHeroGrid == nil then return end -- 同一个英雄 if heroGrid.uuid == putHeroGrid.uuid then return end -- 部位有没有装备 if putHeroGrid.equip == nil then return end local putEquipGrid = putHeroGrid.equip[putHeroPos] if not putEquipGrid then return end local equipID = putEquipGrid.id local equipConfig = EquipExcel.equip[equipID] if equipConfig == nil then return end if heroGrid.star < equipConfig.star then local errDesc = Util.format(Lang.EQUIP_PUT_ON_STAR_ERR, equipConfig.star) return Broadcast.sendErr(human, errDesc) end local pos = equipConfig.subType if pos == ItemDefine.EQUIP_SUBTYPE_SHUIJIN then return end if heroGrid.equip == nil or heroGrid.equip[pos] == nil then heroGrid.equip = heroGrid.equip or { } -- 穿戴者 heroGrid.equip[pos] = putEquipGrid putEquipGrid.putUuid = heroGrid.uuid else -- 同一件装备 if heroGrid.equip[pos].uuid == putHeroGrid.uuid then return Msg.send(msgRet, human.fd) end --放入到背包 local unEquipGrid = heroGrid.equip[pos] unEquipGrid.putUuid = nil EquipLogic.addByEquipGrid(human, unEquipGrid, "equip_puton", true) -- 设置新装备 heroGrid.equip[pos] = putEquipGrid putEquipGrid.putUuid = heroGrid.uuid end -- 老英雄脱去此装备 putHeroGrid.equip[putHeroPos] = nil -- 计算属性 ObjHuman.doCalcHero(human, heroIndex) HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex) HeroLogic.refreshDot(human, heroGrid.uuid) ObjHuman.doCalcHero(human, putHeroIndex) HeroLogic.sendHeroBagDynamic(human, putHeroID, putHeroIndex) HeroLogic.refreshDot(human, putHeroGrid.uuid) -- 通知客户端 local msgRet = Msg.gc.GC_HERO_EQUIP_PUTON msgRet.heroID = heroID msgRet.heroIndex = heroIndex Grid.makeItem(msgRet.equip, equipID, 1, nil, equipGrid, 0, Grid.getOpflagAtBag(equipID)) Msg.send(msgRet, human.fd) end function putOff(human, heroID, heroIndex, pos, noCalc, noSend) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end if pos == ItemDefine.EQUIP_SUBTYPE_SHUIJIN then return end if heroGrid.equip == nil or heroGrid.equip[pos] == nil then return end -- 判断背包空间 if not EquipLogic.checkEmptyCnt(human, 1) then return end -- 改db local equipGrid = heroGrid.equip[pos] heroGrid.equip[pos] = nil equipGrid.putUuid = nil EquipLogic.addByEquipGrid(human, equipGrid, "equip_putoff", true) if noCalc ~= true then -- 计算属性 ObjHuman.doCalcHero(human,heroIndex) HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex) HeroLogic.refreshDot(human, heroGrid.uuid) end if not noSend then -- 通知客户端 local msgRet = Msg.gc.GC_HERO_EQUIP_PUTOFF msgRet.heroID = heroID msgRet.heroIndex = heroIndex msgRet.pos = pos Msg.send(msgRet, human.fd) end end -- 一键穿装 function putOnQuick(human, heroID, heroIndex, equipID1, equipID2, equipID3, equipID4, equipID6) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end putOn(human, heroID, heroIndex, equipID1, true) putOn(human, heroID, heroIndex, equipID2, true) putOn(human, heroID, heroIndex, equipID3, true) putOn(human, heroID, heroIndex, equipID4, true) putOn(human, heroID, heroIndex, equipID6, true) ObjHuman.doCalcHero(human,heroIndex) HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex) HeroLogic.refreshDot(human, heroGrid.uuid) end -- 一键脱装 function putOffQuick(human, heroID, heroIndex, noSendDy) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end putOff(human, heroID, heroIndex, ItemDefine.EQUIP_SUBTYPE_WEAPON, true) 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) if not noSendDy then ObjHuman.doCalcHero(human,heroIndex) HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex) end end function doCalcHero(obj,attrs) local equip = obj.equip if not equip then return end local mathFloor = math.floor local equipSuitCntTable = nil for i = 1,ItemDefine.EQUIP_MAX_CNT do local equipGrid = equip[i] if equipGrid then local equipID = equipGrid.id local equipConfig = EquipExcel.equip[equipID] local baseRate = EquipLogic.getEquipBaseRate(equipGrid.quality) -- 水晶 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 for _,v in ipairs(equipConfig.base) do RoleAttr.updateValue(v[1],mathFloor(v[2] * baseRate),attrs) end -- 随机属性 for key, value in pairs(equipGrid.attr) do RoleAttr.updateValue(key, mathFloor(value * baseRate) ,attrs) end local heroID = obj.id local heroConfig = HeroExcel.hero[heroID] if equipConfig.camp == heroConfig.camp then -- 阵营专属属性 for _,v in ipairs(equipConfig.campAttr) do RoleAttr.updateValue(v[1],v[2],attrs) end end if equipConfig.job == heroConfig.job then -- 职业专属属性 for _,v in ipairs(equipConfig.jobAttr) do RoleAttr.updateValue(v[1],v[2],attrs) end end if equipConfig.suit ~= 0 then equipSuitCntTable = equipSuitCntTable or {} equipSuitCntTable[equipConfig.suit] = equipSuitCntTable[equipConfig.suit] or {cnt = 0} equipSuitCntTable[equipConfig.suit].equipID = equipID equipSuitCntTable[equipConfig.suit].cnt = equipSuitCntTable[equipConfig.suit].cnt + 1 end end end end -- 套装属性 if equipSuitCntTable then for k, v in pairs(equipSuitCntTable) do 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] if v.cnt > i then RoleAttr.updateValue(keyTemp,valTemp,attrs) end end end end end end -- 激活水晶 function jihuoShuijing(human, heroID, heroIndex) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end if heroGrid.lv < HeroDefine.JIHUO_SHUIJING_NEEDLV then return end local pos = ItemDefine.EQUIP_SUBTYPE_SHUIJIN if heroGrid.equip ~= nil and heroGrid.equip[pos] then return end --存db local equipID = HeroDefine.DEFAULT_SHUIJING_GET -- todo 20011 local equipConfig = EquipExcel.equip[equipID] if not equipConfig then return end heroGrid.equip = heroGrid.equip or {} heroGrid.equip[pos] = equipID local randIdCnt = #equipConfig.shuijingAttrID local indexTemp = math.random(1,randIdCnt) local attrID = equipConfig.shuijingAttrID[indexTemp] heroGrid.shuijingAttrID = attrID -- 计算属性 ObjHuman.doCalcHero(human,heroIndex) HeroLogic.sendHeroBagDynamic(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) Msg.send(msgRet, human.fd) end -- 水晶转换的信息查询 function shuijingTransQuery(human, heroID, heroIndex) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end local pos = ItemDefine.EQUIP_SUBTYPE_SHUIJIN if heroGrid.equip == nil or heroGrid.equip[pos] == nil then return end local equipID = heroGrid.equip[pos] local shuijingTransConfig = EquipExcel.shuijingTransNeed[equipID] if not shuijingTransConfig then return end local msgRet = Msg.gc.GC_SHUIJING_TRANS_QUERY msgRet.heroID = heroID msgRet.heroIndex = heroIndex msgRet.needJinbi = shuijingTransConfig.money msgRet.needItemCnt = shuijingTransConfig.jinghua Msg.send(msgRet, human.fd) end -- 水晶转换 function shuijingTransDo(human, heroID, heroIndex) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end local pos = ItemDefine.EQUIP_SUBTYPE_SHUIJIN if heroGrid.equip == nil or heroGrid.equip[pos] == nil then return end local equipID = heroGrid.equip[pos] local shuijingTransConfig = EquipExcel.shuijingTransNeed[equipID] if not shuijingTransConfig then return end -- 材料判断 local needJinbi = shuijingTransConfig.money if human.db.jinbi < needJinbi then return Broadcast.sendErr(human, Lang.COMMON_NO_JINBI) end local needItemCnt = shuijingTransConfig.jinghua local nowItemCnt = BagLogic.getItemCnt(human, ItemDefine.ITEM_SHUIJING_UPLEVEL_ID) if nowItemCnt< needItemCnt then local strName = ItemDefine.getValue(ItemDefine.ITEM_SHUIJING_UPLEVEL_ID, "name") local strRet = Util.format(Lang.COMMON_NO_ITEM, strName) return Broadcast.sendErr(human, strRet) end -- 扣道具 BagLogic.delItem(human, ItemDefine.ITEM_SHUIJING_UPLEVEL_ID, needItemCnt, "shuijing_change") ObjHuman.updateJinbi(human, -needJinbi, "shuijing_change") local msgRet = Msg.gc.GC_SHUIJING_TRANS_DO msgRet.heroID = heroID msgRet.heroIndex = heroIndex -- 存db之前,先随机获得下一个水晶的属性 local equipConfig = EquipExcel.equip[equipID] if not equipConfig then return end local randIdCnt = #equipConfig.shuijingAttrID local indexTemp = math.random(1,randIdCnt) -- todo 单单这样子会有漏洞。。。玩家可以把水晶A洗练出的属性保存到水晶B那里,需要注意!!太忙了,之后修改 human.tempAttrID = equipConfig.shuijingAttrID[indexTemp] -- 通知客户端 Grid.makeItem(msgRet.equip, equipID, 1, human.tempAttrID) Msg.send(msgRet, human.fd) end -- 水晶转换保存 function shuijingTransSave(human, heroID, heroIndex) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end local pos = ItemDefine.EQUIP_SUBTYPE_SHUIJIN if heroGrid.equip == nil or heroGrid.equip[pos] == nil then return end if human.tempAttrID == nil then return end local equipID = heroGrid.equip[pos] -- 改db heroGrid.shuijingAttrID = human.tempAttrID human.tempAttrID = nil -- 计算属性并发送 ObjHuman.doCalcHero(human,heroIndex) HeroLogic.sendHeroBagDynamic(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) Msg.send(msgRet, human.fd) local msgRet = Msg.gc.GC_SHUIJING_TRANS_SAVE Msg.send(msgRet, human.fd) end -- 水晶升级查询 function shuijingUpLvQuery(human, mainType, heroID, heroIndex) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end local pos = ItemDefine.EQUIP_SUBTYPE_SHUIJIN if heroGrid.equip == nil or heroGrid.equip[pos] == nil then return end local equipID = heroGrid.equip[pos] local shuijingUpNeedConfig = EquipExcel.shuijingUpNeed[equipID] if not shuijingUpNeedConfig then return end -- 上限判断 local nextID = shuijingUpNeedConfig.nextID if nextID == 0 then return end local msgRet = Msg.gc.GC_SHUIJING_UPLV_QUERY msgRet.heroID = heroID msgRet.heroIndex = heroIndex msgRet.needJinbi = 0 msgRet.needItemCnt = 0 msgRet.needZuanshi = 0 local nextID = shuijingUpNeedConfig.nextID if nextID ~= 0 then local tempConfig = EquipExcel.shuijingUpNeed[nextID] msgRet.needJinbi = tempConfig.money msgRet.needItemCnt = tempConfig.jinghua msgRet.needZuanshi = tempConfig.zuanshi end msgRet.equip[0] = 1 local attrID = heroGrid.shuijingAttrID local tempAttrID = EquipExcel.shuijingAttr[attrID].lockNextID Grid.makeItem(msgRet.equip[1], nextID, 1, tempAttrID) Msg.send(msgRet, human.fd) end -- 水晶升级 function shuijingUpLvDo(human, mainType, heroID, heroIndex) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end local pos = ItemDefine.EQUIP_SUBTYPE_SHUIJIN if heroGrid.equip == nil or heroGrid.equip[pos] == nil then return end local equipID = heroGrid.equip[pos] local shuijingUpNeedConfig = EquipExcel.shuijingUpNeed[equipID] if not shuijingUpNeedConfig then return end -- 上限判断 local nextID = shuijingUpNeedConfig.nextID if nextID == 0 then return end local nextConfig = EquipExcel.shuijingUpNeed[nextID] if nextConfig == nil then return end -- 材料判断 local needJinbi = nextConfig.money if human.db.jinbi < needJinbi then return Broadcast.sendErr(human, Lang.COMMON_NO_JINBI) end local needItemCnt = nextConfig.jinghua local nowItemCnt = BagLogic.getItemCnt(human, ItemDefine.ITEM_SHUIJING_UPLEVEL_ID) if nowItemCnt< needItemCnt then local strName = ItemDefine.getValue(ItemDefine.ITEM_SHUIJING_UPLEVEL_ID, "name") local strRet = Util.format(Lang.COMMON_NO_ITEM, strName) return Broadcast.sendErr(human, strRet) end if mainType == HeroDefine.SHUIJING_UP_LV_LOCK then local needZuanshi = nextConfig.zuanshi if not ObjHuman.checkRMB(human, needZuanshi) then return end end -- 扣道具 BagLogic.delItem(human, ItemDefine.ITEM_SHUIJING_UPLEVEL_ID, needItemCnt, "shuijing_change") ObjHuman.updateJinbi(human, -needJinbi, "shuijing_change") if mainType == HeroDefine.SHUIJING_UP_LV_LOCK then local needZuanshi = shuijingUpNeedConfig.zuanshi ObjHuman.decZuanshi(human, -needZuanshi, "shuijing_change") end --改db heroGrid.equip[pos] = nextID if mainType == HeroDefine.SHUIJING_UP_LV_LOCK then local attrID = heroGrid.shuijingAttrID heroGrid.shuijingAttrID = EquipExcel.shuijingAttr[attrID].lockNextID else local equipConfig = EquipExcel.equip[nextID] if not equipConfig then return end local randIdCnt = #equipConfig.shuijingAttrID local indexTemp = math.random(1,randIdCnt) heroGrid.shuijingAttrID = equipConfig.shuijingAttrID[indexTemp] end -- 计算属性并发送 ObjHuman.doCalcHero(human,heroIndex) HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex) -- 通知客户端 local msgRet = Msg.gc.GC_HERO_EQUIP_PUTON msgRet.heroID = heroID msgRet.heroIndex = heroIndex Grid.makeItem(msgRet.equip, nextID, 1, heroGrid.shuijingAttrID) 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) Msg.send(msgRet, human.fd) end -- 神器升级查询 function shenqiUpLvQuery(human, heroID, heroIndex) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end local pos = ItemDefine.EQUIP_SUBTYPE_SHENQI if heroGrid.equip == nil or heroGrid.equip[pos] == nil then return end local equipID = heroGrid.equip[pos] local shenqiUpNeedConfig = EquipExcel.shenqiUpNeed[equipID] if not shenqiUpNeedConfig then return end -- 上限判断 local nextID = shenqiUpNeedConfig.nextID if nextID == 0 then return end -- 下发信息 local msgRet = Msg.gc.GC_SHENQI_UPLV_QUERY msgRet.heroID = heroID msgRet.heroIndex = heroIndex msgRet.needExp = shenqiUpNeedConfig.needExp Grid.makeItem(msgRet.equip, nextID, 1) Msg.send(msgRet, human.fd) end -- 神器升级 function shenqiUpLvDo(human, heroID, heroIndex, equipIDList, equipCntList) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if heroGrid == nil then return end local pos = ItemDefine.EQUIP_SUBTYPE_SHENQI if heroGrid.equip == nil or heroGrid.equip[pos] == nil then return end local equipID = heroGrid.equip[pos] local shenqiUpNeedConfig = EquipExcel.shenqiUpNeed[equipID] if not shenqiUpNeedConfig then return end -- 上限判断 local nextID = shenqiUpNeedConfig.nextID if nextID == 0 then return end -- 判断消耗 if equipIDList[0] ~= equipCntList[0] then return end for i=1, equipIDList[0] do local needEquipCnt = equipCntList[i] local nowEquipCnt = BagLogic.getItemCnt(human, equipIDList[i]) if nowEquipCnt < needEquipCnt then return end end local totalExp = 0 for i=1, equipIDList[0] do local id = equipIDList[i] local equipConfig = EquipExcel.equip[id] if equipConfig then local nowExp = equipConfig.shenqiExp local nowCnt = equipCntList[i] totalExp = totalExp + math.floor(nowExp * nowCnt) else local itemConfig = ItemExcel[id] if not itemConfig or (id ~= ItemDefine.ITEM_SHENQI_EXP_ID1 and id ~= ItemDefine.ITEM_SHENQI_EXP_ID2) then return end local nowExp = itemConfig.effect local nowCnt = equipCntList[i] totalExp = totalExp + math.floor(nowExp * nowCnt) end end local needExp = shenqiUpNeedConfig.needExp if totalExp < needExp then return Broadcast.sendErr(human, Lang.EQUIP_SHENQI_UP_ERR_EXP) end -- 扣道具 for i=1, equipIDList[0] do local needEquipCnt = equipCntList[i] BagLogic.delItem(human, equipIDList[i], needEquipCnt, "shenqi_upLv") end -- 改db heroGrid.equip[pos] = nextID local backExp = totalExp - needExp local backCnt = math.floor(backExp/10) -- 返还物 if backCnt > 0 then BagLogic.addItem(human, HeroDefine.DEFAULT_SHENQI_UPLV_BACK, backCnt, "shenqi_upLv_back", noSend) end -- 计算属性 ObjHuman.doCalcHero(human,heroIndex) HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex) -- 通知客户端 local msgRet = Msg.gc.GC_HERO_EQUIP_PUTON msgRet.heroID = heroID msgRet.heroIndex = heroIndex Grid.makeItem(msgRet.equip, nextID, 1) Msg.send(msgRet, human.fd) local msgRet = Msg.gc.GC_SHENQI_UPLV_DO msgRet.heroID = heroID msgRet.heroIndex = heroIndex if backCnt > 0 then msgRet.equip[0] = 1 Grid.makeItem(msgRet.equip[1], HeroDefine.DEFAULT_SHENQI_UPLV_BACK,backCnt) else msgRet.equip[0] = 0 end Msg.send(msgRet, human.fd) end -- 比较2件装备信息,返回较好的装备id function cmpEquip(equipID1, equipID2, heroConfig) if not equipID1 then return equipID2 end if not equipID2 then return equipID1 end if equipID1 == equipID2 then return equipID1 end local config1 = EquipExcel.equip[equipID1] if not config1 then return equipID2 end local config2 = EquipExcel.equip[equipID2] if not config2 then return equipID1 end if config1.rare ~= config2.rare then return (config1.rare > config2.rare) and equipID1 or equipID2 end if config1.level ~= config2.level then return (config1.level > config2.level) and equipID1 or equipID2 end if heroConfig then -- 专属装备判断 阵营 职业 if config1.camp == heroConfig.camp then return equipID1 end if config2.camp == heroConfig.camp then return equipID2 end if config1.job == heroConfig.job then return equipID1 end if config2.job == heroConfig.job then return equipID2 end end return equipID1 end -- 根据部位和伙伴信息获取背包最好的装备id function getBagBestEquipID(human, pos, heroConfig) local bestEquipID = nil for k, equipGrid in pairs(human.db.equipBag) do local config = EquipExcel.equip[equipGrid.id] if config and config.subType == pos then bestEquipID = cmpEquip(bestEquipID, equipGrid.id, heroConfig) end end return bestEquipID end -- 是否有装备红点 function isEquipDot(human, heroGrid) if human.db.lv < 9 then return false end if not heroGrid then return end local heroConfig = HeroExcel.hero[heroGrid.id] if not heroConfig then return end for pos = 1, ItemDefine.EQUIP_MAX_CNT do if pos ~= ItemDefine.EQUIP_SUBTYPE_SHUIJIN then local equipGrid = heroGrid.equip and heroGrid.equip[pos] if equipGrid == nil and EquipLogic.getEquipByPos(human, heroGrid.star, pos) then return true end end end end -- 是否有装备红点 function isEquipDotByPos(human, heroGrid, pos) if human.db.lv < 9 then return false end if not heroGrid then return end local heroConfig = HeroExcel.hero[heroGrid.id] if not heroConfig then return end if pos ~= ItemDefine.EQUIP_SUBTYPE_SHUIJIN then local equipGrid = heroGrid.equip and heroGrid.equip[pos] if equipGrid == nil and EquipLogic.getEquipByPos(human, heroGrid.star, pos) then return 1 end end end function getEquipAndFuwenByHeroIndex(human,heroID,heroIndex) local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex) if not heroGrid then return end local heroConfig = HeroExcel.hero[heroGrid.id] if not heroConfig then return end local equipTb = {} for pos = 1, ItemDefine.EQUIP_MAX_CNT do if pos ~= ItemDefine.EQUIP_SUBTYPE_SHUIJIN then local equipID = heroGrid.equip and heroGrid.equip[pos] and heroGrid.equip[pos].id equipTb[pos] = equipID end end local fuwenTb = {} for pos = 1,2 do local fuwenIndex = heroGrid.fuwen and heroGrid.fuwen[pos] fuwenTb[pos] = fuwenIndex end return equipTb,fuwenTb end