Files
Main/Assets/GameAssets/Resources/Lua/Logic/Pet/PetEquipSystem.lua
2025-01-25 04:38:09 +08:00

951 lines
38 KiB
Lua

------------------------------------------------
--作者: HJ
--日期: 2020-11-04
--文件: PetEquipSystem.lua
--模块: PetEquipSystem
--描述: 宠物装备系统代码
------------------------------------------------
local FightUtils = require "Logic.Base.FightUtils.FightUtils"
local PetSoulInfo = require "Logic.Pet.PetSoulInfo"
local PetInfo = require "Logic.Pet.PetInfo"
local RedPointCustomCondition = CS.Thousandto.Code.Logic.RedPointCustomCondition
local RedPointItemCondition = CS.Thousandto.Code.Logic.RedPointItemCondition
local RedPointTaskCondition = CS.Thousandto.Code.Logic.RedPointTaskCondition
local PetEquipSystem = {
--当前点击过的助阵宠物ID列表
ClickPetList = List:New(),
--当前助阵糟位数据
CurPetCellsDic = Dictionary:New(),
--帧计数,红点判断间隔使用
FrameCount = 0,
--装备合成需要的额外物品列表
EquipSynNeedItemList = List:New(),
}
--初始化
function PetEquipSystem:Initialize()
self.ClickPetList:Clear()
GameCenter.RegFixEventHandle(LogicLuaEventDefine.EVENT_PETEQUIP_BAGCHANGE, self.OnEquipChange, self)
end
--反初始化
function PetEquipSystem:UnInitialize()
GameCenter.UnRegFixEventHandle(LogicLuaEventDefine.EVENT_PETEQUIP_BAGCHANGE, self.OnEquipChange, self)
end
function PetEquipSystem:Update(dt)
if self.FrameCount then
self.FrameCount = self.FrameCount + 1
if self.FrameCount >= 20 and self.IsSetRed then
local _wearRed = false
local _allEquipList = self:GetHightPetEquipList()
local _keys = self.CurPetCellsDic:GetKeys()
for i = 1, #_keys do
if self.CurPetCellsDic[_keys[i]].PetID > 0 and not _wearRed and self:GetEquipWearRedByPetCell(_keys[i], _allEquipList) then
_wearRed = true
break
end
end
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_PETEQUIP_PETLISTUPDATE)
GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.PetEquipWear, _wearRed)
self.IsSetRed = false
self.FrameCount = 0
self:SetEquipSynRed()
end
end
end
--背包宠物装备变化
function PetEquipSystem:OnEquipChange(obj, sender)
self.IsSetRed = true
end
function PetEquipSystem:GetEquipWearRedByPetCell(assistantId, allEquipList)
local _red = false
local _equipCellDic = self.CurPetCellsDic[assistantId].EquipCellDic
local _keys = _equipCellDic:GetKeys()
for i = 1, #_keys do
if self:GetPetEquipCellState(_keys[i], assistantId) then
local _power = 0
if _equipCellDic[_keys[i]].EquipInfo then
_power = _equipCellDic[_keys[i]].EquipInfo.Power
end
if allEquipList:ContainsKey(_keys[i]) then
if allEquipList[_keys[i]].Power > _power then
_red = true
end
end
else
break
end
end
return _red
end
--设置宠物助阵红点
function PetEquipSystem:SetPetFightRed()
GameCenter.RedPointSystem:CleraFuncCondition(FunctionStartIdCode.PetFight)
self.CurPetCellsDic:ForeachCanBreak(function(k, v)
if v.PetID == 0 and v.IsOpen and not self.ClickPetList:Contains(k) then
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.PetFight, k, RedPointCustomCondition(true))
elseif v.PetID == 0 and not v.IsOpen and v.Condition then
local _ar = Utils.SplitNumber(v.Condition, '_')
if _ar[1] ~= 1 and _ar[1] ~= 56 and _ar[1] ~= 150 then
local _conditions = List:New();
_conditions:Add(RedPointItemCondition(_ar[1], _ar[2]));
GameCenter.RedPointSystem:LuaAddFuncCondition(FunctionStartIdCode.PetFight, k * 1000, _conditions);
end
end
end)
end
--查询某个宠物是否助战
function PetEquipSystem:PetIsFighting(petId)
local _isFight = false
self.CurPetCellsDic:ForeachCanBreak(function(k, v)
if v.PetID == petId then
_isFight = true
return true
end
end)
return _isFight
end
--查询助战的宠物列表
function PetEquipSystem:GetFightPetList()
local list = List:New()
local _index = 1
local _keys = self.CurPetCellsDic:GetKeys()
for i = 1, #_keys do
local v = self.CurPetCellsDic[_keys[i]]
if v.PetID > 0 then
if _index ~= 1 then
list:Add(v.PetID)
end
_index = _index + 1
end
end
return list
end
function PetEquipSystem:GetPetEquipPowerByPart(cellId, part)
local _isFight = 0
if self.CurPetCellsDic:ContainsKey(cellId) then
if self.CurPetCellsDic[cellId].EquipCellDic:ContainsKey(part) and self.CurPetCellsDic[cellId].EquipCellDic[part].EquipInfo then
_isFight = self.CurPetCellsDic[cellId].EquipCellDic[part].EquipInfo.Power
else
if not self:GetPetEquipCellState(part, cellId) then
_isFight = -1
end
end
end
return _isFight
end
function PetEquipSystem:GetPetEquipByPart(cellId, part)
local _info = nil
if self.CurPetCellsDic:ContainsKey(cellId) then
if self.CurPetCellsDic[cellId].EquipCellDic:ContainsKey(part) then
_info = self.CurPetCellsDic[cellId].EquipCellDic[part].EquipInfo
end
end
return _info
end
--获取强化属性
function PetEquipSystem:GetPetStrengthAtt(assistantId, part)
local _dic = Dictionary:New()
if self.CurPetCellsDic:ContainsKey(assistantId) then
if self.CurPetCellsDic[assistantId].EquipCellDic:ContainsKey(part) then
local _lv = self.CurPetCellsDic[assistantId].EquipCellDic[part].StrengthLv
local _cfg = DataConfig.DataPetEquipInten[assistantId * 100000000 + part * 10000 + _lv]
if _cfg then
local _arr = Utils.SplitStr(_cfg.Value, ';')
for i = 1, #_arr do
local _sg = Utils.SplitNumber(_arr[i], '_')
if _sg[2] > 0 then
_dic:Add(_sg[1], _sg[2])
end
end
end
end
end
return _dic
end
--获取附魂属性
function PetEquipSystem:GetPetSoulAtt(assistantId, part)
local _dic = Dictionary:New()
if self.CurPetCellsDic:ContainsKey(assistantId) then
if self.CurPetCellsDic[assistantId].EquipCellDic:ContainsKey(part) then
local _lv = self.CurPetCellsDic[assistantId].EquipCellDic[part].SoulLv
local _cfg = DataConfig.DataPetEquipSoulbound[assistantId * 100000000 + part * 10000 + _lv]
if _cfg then
local _arr = Utils.SplitStr(_cfg.ExtraValue, ';')
for i = 1, #_arr do
local _sg = Utils.SplitNumber(_arr[i], '_')
if _sg[2] > 0 then
_dic:Add(_sg[1], _sg[2])
end
end
end
end
end
return _dic
end
--获取附魂属性
function PetEquipSystem:GetPetEquipSoulLv(assistantId, part)
if self.CurPetCellsDic:ContainsKey(assistantId) then
if self.CurPetCellsDic[assistantId].EquipCellDic:ContainsKey(part) then
local _lv = self.CurPetCellsDic[assistantId].EquipCellDic[part].SoulLv
return _lv
end
end
return 0
end
--设置装备强化红点
function PetEquipSystem:SetEquipStrengthRed()
GameCenter.RedPointSystem:CleraFuncCondition(FunctionStartIdCode.PetEquipStrength)
self.CurPetCellsDic:ForeachCanBreak(function(k, v)
v.EquipCellDic:ForeachCanBreak(function(ik, iv)
if iv.EquipInfo then
self:SetEquipCellStrengthRed(k, ik)
end
end)
local _cfg = DataConfig.DataPetEquipIntenClass[v.TotalStrActiveID + 1]
if _cfg then
if _cfg.SuitLevel <= v.TotalStrLv then
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.PetEquipStrength, k*1000, RedPointCustomCondition(true))
else
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.PetEquipStrength, k*1000, RedPointCustomCondition(false))
end
end
end)
end
--设置装备附魂红点
function PetEquipSystem:SetEquipSoulRed()
GameCenter.RedPointSystem:CleraFuncCondition(FunctionStartIdCode.PetEquipFuhun)
self.CurPetCellsDic:ForeachCanBreak(function(k, v)
v.EquipCellDic:ForeachCanBreak(function(ik, iv)
if iv.EquipInfo then
self:SetEquipCellSoulRed(k, ik)
end
end)
local _cfg = DataConfig.DataPetEquipSoulboundClass[v.TotalSoulActiveID + 1]
if _cfg then
if _cfg.SuitLevel <= v.TotalSoulLv then
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.PetEquipFuhun, k*1000, RedPointCustomCondition(true))
else
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.PetEquipFuhun, k*1000, RedPointCustomCondition(false))
end
end
end)
end
--某个装备附魂红点
function PetEquipSystem:SetEquipCellSoulRed(cellId, partId)
if self.CurPetCellsDic:ContainsKey(cellId) then
local info = self.CurPetCellsDic[cellId]
if info.EquipCellDic:ContainsKey(partId) then
if info.EquipCellDic[partId].EquipInfo then
local _cfg = DataConfig.DataPetEquipSoulbound[cellId * 100000000 + partId * 10000 + info.EquipCellDic[partId].SoulLv]
local _cfg1 = DataConfig.DataPetEquipSoulbound[cellId * 100000000 + partId * 10000 + info.EquipCellDic[partId].SoulLv + 1]
if _cfg and _cfg1 and _cfg.Consume and _cfg.Consume ~= "" then
local _itemArr = Utils.SplitNumber(_cfg.Consume, '_')
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.PetEquipFuhun, cellId*1000+partId, RedPointItemCondition(_itemArr[1], _itemArr[2]))
end
end
end
end
end
--获取某个助战糟位的附魂红点
function PetEquipSystem:GetPetCellSoulRed(cellId)
local _red = false
local _dic = self.CurPetCellsDic
if cellId and _dic[cellId] then
local _keys = _dic[cellId].EquipCellDic:GetKeys()
local _equipDic = _dic[cellId].EquipCellDic
for i = 1, #_keys do
local _equip = _equipDic[_keys[i]].EquipInfo
if _equip then
if GameCenter.RedPointSystem:OneConditionsIsReach(FunctionStartIdCode.PetEquipFuhun, cellId * 1000 + _keys[i]) then
_red = true
break
end
end
end
if not _red then
if GameCenter.RedPointSystem:OneConditionsIsReach(FunctionStartIdCode.PetEquipFuhun, cellId * 1000) then
_red = true
end
end
end
return _red
end
--某个装备强化红点
function PetEquipSystem:SetEquipCellStrengthRed(cellId, partId)
if self.CurPetCellsDic:ContainsKey(cellId) then
local info = self.CurPetCellsDic[cellId]
if info.EquipCellDic:ContainsKey(partId) then
if info.EquipCellDic[partId].EquipInfo then
local _cfg = DataConfig.DataPetEquipInten[cellId * 100000000 + partId * 10000 + info.EquipCellDic[partId].StrengthLv]
local _cfg1 = DataConfig.DataPetEquipInten[cellId * 100000000 + partId * 10000 + info.EquipCellDic[partId].StrengthLv + 1]
if _cfg and _cfg1 and _cfg.Consume and _cfg.Consume ~= "" then
local _itemArr = Utils.SplitNumber(_cfg.Consume, '_')
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.PetEquipStrength, cellId*1000+partId, RedPointItemCondition(_itemArr[1], _itemArr[2]))
end
end
end
end
end
--获取某个助战糟位的强化红点
function PetEquipSystem:GetPetCellStrengthRed(cellId)
local _dic = self.CurPetCellsDic
local _strengthRed = false
if cellId and _dic[cellId] then
local _keys = _dic[cellId].EquipCellDic:GetKeys()
local _equipDic = _dic[cellId].EquipCellDic
for i = 1, #_keys do
local _equip = _equipDic[_keys[i]].EquipInfo
if _equip then
if GameCenter.RedPointSystem:OneConditionsIsReach(FunctionStartIdCode.PetEquipStrength, cellId * 1000 + _keys[i]) then
_strengthRed = true
break
end
end
end
if not _strengthRed then
if GameCenter.RedPointSystem:OneConditionsIsReach(FunctionStartIdCode.PetEquipStrength, cellId * 1000) then
_strengthRed = true
end
end
end
return _strengthRed
end
--获取激活的全身强化等级(以配置表为ID)
function PetEquipSystem:GetTotalActiveStrLv(assistantId)
if self.CurPetCellsDic[assistantId] then
return self.CurPetCellsDic[assistantId].TotalStrActiveID
end
return 1
end
--获取激活的全身附魂等级(以配置表为ID)
function PetEquipSystem:GetTotalActiveSoulLv(assistantId)
if self.CurPetCellsDic[assistantId] then
return self.CurPetCellsDic[assistantId].TotalSoulActiveID
end
return 1
end
function PetEquipSystem:GetPetEquipCellState(partId, assistantId, showMsg)
local _state = false
local _cfg = DataConfig.DataPetEquipUnlock[assistantId * 10000 + partId]
if _cfg then
local _ar = Utils.SplitNumber(_cfg.PartUnlock, '_')
if _ar then
if _ar[1] == 1 then
local _lpLv = GameCenter.GameSceneSystem:GetLocalPlayerLevel()
if _ar[2] then
if _lpLv >= _ar[2] then
_state = true
else
_state = false
if showMsg then
Utils.ShowPromptByEnum("C_PETEQUIP_EQUIPWEAR1", _ar[2])
end
end
end
elseif _ar[1] == 56 then
local _petLv = GameCenter.PetSystem.CurLevel
if _ar[2] and _petLv then
if _petLv >= _ar[2] then
_state = true
else
_state = false
if showMsg then
Utils.ShowPromptByEnum("C_PETEQUIP_EQUIPWEAR2", _ar[2])
end
end
end
end
end
end
return _state
end
function PetEquipSystem:SetEquipSynRed()
local allEquipList = self:GetAllPetEquip()
local _red = false
self.CurPetCellsDic:ForeachCanBreak(function(k, v)
if self:GetEquipSynthByPet(k, allEquipList) then
_red = true
return true
end
end)
GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.PetEquipSynth, _red)
end
--某个宠物身上的装备是否可合成
function PetEquipSystem:GetEquipSynthByPet(assistantId, allEquipList)
local _isRed = false
if not GameCenter.MainFunctionSystem:FunctionIsVisible(FunctionStartIdCode.PetEquipSynth) then
return false
end
if self.CurPetCellsDic:ContainsKey(assistantId) then
local _equipCellDic = self.CurPetCellsDic[assistantId].EquipCellDic
local _func = function(k, v)
if v.EquipInfo then
local _cfg = DataConfig.DataPetEquipSynthesis[v.EquipInfo.CfgID]
if _cfg then
if not allEquipList then
allEquipList = self:GetAllPetEquip()
end
local itemflag = true
if _cfg.JoinItem and _cfg.JoinItem ~= "" then
local itemArr = Utils.SplitNumber(_cfg.JoinItem, '_')
if #itemArr >= 2 then
local itemID = itemArr[1]
local needNum = itemArr[2]
local haveNum = GameCenter.ItemContianerSystem:GetItemCountFromCfgId(itemID)
if haveNum < needNum then
itemflag = false;
if _cfg.ItemPrice and _cfg.ItemPrice ~= "" then
local coinArr = Utils.SplitNumber(_cfg.ItemPrice, '_');
if (#coinArr >= 2) then
local coinID = coinArr[1]
local price = coinArr[2]
local haveCoinNum = GameCenter.ItemContianerSystem:GetEconomyWithType(coinID);
if haveCoinNum >= price * (needNum - haveNum) then
itemflag = true;
end
if not self.EquipSynNeedItemList:Contains(coinID) then
self.EquipSynNeedItemList:Add(coinID)
end
end
end
end
if not self.EquipSynNeedItemList:Contains(itemID) then
self.EquipSynNeedItemList:Add(itemID)
end
end
end
if itemflag then
local _quaList = Utils.SplitNumber(_cfg.Quality, '_')
local _starList = Utils.SplitNumber(_cfg.Diamond, '_')
local _partList = List:New()
local _equipList = List:New()
if _cfg.JoinPart and _cfg.JoinPart ~= "" then
_partList = Utils.SplitNumber(_cfg.JoinPart, '_')
end
if allEquipList then
for i = 1, #allEquipList do
if ((#_partList > 0 and _partList:Contains(allEquipList[i].Part)) or #_partList == 0) and allEquipList[i].Quality == 6 and allEquipList[i].StarNum == 1 and _starList:Contains(allEquipList[i].StarNum) and _quaList:Contains(allEquipList[i].Quality) then
_equipList:Add(allEquipList[i])
end
end
end
local _per = 0
for i = 1, #_equipList do
local _starIndex = 0
local _quaIndex = 0
for j = 1, #_starList do
if _starList[j] == _equipList[i].StarNum then
local _starPerList = Utils.SplitNumber(_cfg.DiamondNumber, '_')
if _starPerList[j] then
_starIndex = _starPerList[j]
break
end
end
end
for j = 1, #_quaList do
if _quaList[j] == _equipList[i].Quality then
local _quaPerList = Utils.SplitNumber(_cfg.QualityNumber, '_')
if _quaPerList[j] then
_quaIndex = _quaPerList[j]
break
end
end
end
_per = _per + _cfg.JoinNumProbability * _quaIndex * _starIndex / 100000000
if _per >= 10000 then
break
end
end
if _per >= 10000 then
_isRed = true
return true
end
end
end
end
end
_equipCellDic:ForeachCanBreak(_func)
end
return _isRed
end
--某个宠物身上的某件装备是否可合成
function PetEquipSystem:GetEquipSynthByPetEquip(assistantId, equipPart, allEquipList)
local _isRed = false
if self.CurPetCellsDic:ContainsKey(assistantId) then
local _equipCellDic = self.CurPetCellsDic[assistantId].EquipCellDic
if _equipCellDic:ContainsKey(equipPart) then
local v = _equipCellDic[equipPart]
if v.EquipInfo then
local _cfg = DataConfig.DataPetEquipSynthesis[v.EquipInfo.CfgID]
if _cfg then
if not allEquipList then
allEquipList = self:GetAllPetEquip()
end
local itemflag = true
if _cfg.JoinItem and _cfg.JoinItem ~= "" then
local itemArr = Utils.SplitNumber(_cfg.JoinItem, '_')
if #itemArr >= 2 then
local itemID = itemArr[1]
local needNum = itemArr[2]
local haveNum = GameCenter.ItemContianerSystem:GetItemCountFromCfgId(itemID)
if haveNum < needNum then
itemflag = false;
if _cfg.ItemPrice and _cfg.ItemPrice ~= "" then
local coinArr = Utils.SplitNumber(_cfg.ItemPrice, '_');
if (#coinArr >= 2) then
local coinID = coinArr[1]
local price = coinArr[2]
local haveCoinNum = GameCenter.ItemContianerSystem:GetEconomyWithType(coinID);
if haveCoinNum >= price * (needNum - haveNum) then
itemflag = true;
end
if not self.EquipSynNeedItemList:Contains(coinID) then
self.EquipSynNeedItemList:Add(coinID)
end
end
end
end
if not self.EquipSynNeedItemList:Contains(itemID) then
self.EquipSynNeedItemList:Add(itemID)
end
end
end
if itemflag then
local _quaList = Utils.SplitNumber(_cfg.Quality, '_')
local _starList = Utils.SplitNumber(_cfg.Diamond, '_')
local _partList = List:New()
local _equipList = List:New()
if _cfg.JoinPart and _cfg.JoinPart ~= "" then
_partList = Utils.SplitNumber(_cfg.JoinPart, '_')
end
if allEquipList then
for i = 1, #allEquipList do
if ((#_partList > 0 and _partList:Contains(allEquipList[i].Part)) or #_partList == 0) and allEquipList[i].Quality == 6 and allEquipList[i].StarNum == 1 and _starList:Contains(allEquipList[i].StarNum) and _quaList:Contains(allEquipList[i].Quality) then
_equipList:Add(allEquipList[i])
end
end
end
local _per = 0
for i = 1, #_equipList do
local _starIndex = 0
local _quaIndex = 0
for j = 1, #_starList do
if _starList[j] == _equipList[i].StarNum then
local _starPerList = Utils.SplitNumber(_cfg.DiamondNumber, '_')
if _starPerList[j] then
_starIndex = _starPerList[j]
break
end
end
end
for j = 1, #_quaList do
if _quaList[j] == _equipList[i].Quality then
local _quaPerList = Utils.SplitNumber(_cfg.QualityNumber, '_')
if _quaPerList[j] then
_quaIndex = _quaPerList[j]
break
end
end
end
_per = _per + _cfg.JoinNumProbability * _quaIndex * _starIndex / 100000000
if _per >= 10000 then
break
end
end
if _per >= 10000 then
_isRed = true
end
end
end
end
end
end
return _isRed
end
--获取强化配置
function PetEquipSystem:GetStrengthCfgByLv(lv, PetCellID, Pos)
return DataConfig.DataPetEquipInten[PetCellID * 100000000 + Pos * 10000 + lv]
end
--获取宠物背包中的所有装备
function PetEquipSystem:GetAllPetEquip()
local ddressList = GameCenter.NewItemContianerSystem:GetItemListNOGC(LuaContainerType.ITEM_LOCATION_PETEQUIP);
return ddressList;
end
--查找可以进行合成的宠物装备
function PetEquipSystem:GetPetEquipCanSyn(quaList, starList, partList)
local list = List:New()
local bpModel = GameCenter.NewItemContianerSystem:GetBackpackModelByType(LuaContainerType.ITEM_LOCATION_PETEQUIP);
if bpModel then
bpModel.ItemsOfIndex:Foreach(function(k, v)
if (v and quaList:Contains(v.Quality) and starList:Contains(v.StarNum)) then
if (partList and #partList > 0) then
if (partList:Contains(v.Part)) then
list:Add(v);
end
else
list:Add(v);
end
end
end)
end
list:Sort(function(x, y)
return x.Power > y.Power
end);
return list;
end
--获取每个部位战力最高的装备
function PetEquipSystem:GetHightPetEquipList()
local _cacheDic = Dictionary:New()
local bpModel = GameCenter.NewItemContianerSystem:GetBackpackModelByType(LuaContainerType.ITEM_LOCATION_PETEQUIP);
if bpModel then
bpModel.ItemsOfIndex:Foreach(function(k, v)
if (_cacheDic:ContainsKey(v.Part) and _cacheDic[v.Part].Power < v.Power) then
_cacheDic[v.Part] = v;
elseif (not _cacheDic:ContainsKey(v.Part)) then
_cacheDic:Add(v.Part, v);
end
end)
end
return _cacheDic;
end
------------------------------数据请求begin--------------------------
--更换助阵宠物
function PetEquipSystem:ReqChangeAssiPet(petId, assistantId)
local _msg = ReqMsg.MSG_Pet.ReqChangeAssiPet:New()
_msg.petModelId = petId
_msg.assistantId = assistantId
_msg:Send()
end
--穿戴装备
function PetEquipSystem:ReqPetEquipWear(equipID, partId, assistantId)
if self:GetPetEquipCellState(partId, assistantId, true) then
local _msg = ReqMsg.MSG_Pet.ReqPetEquipWear:New()
_msg.equipId = equipID
_msg.cellId = partId
_msg.assistantId = assistantId
_msg:Send()
end
end
--卸下装备
function PetEquipSystem:ReqPetEquipUnWear(partId, assistantId)
local _msg = ReqMsg.MSG_Pet.ReqPetEquipUnWear:New()
_msg.cellId = partId
_msg.assistantId = assistantId
_msg:Send()
end
--强化装备
function PetEquipSystem:ReqPetEquipStrength(partId, assistantId)
local _msg = ReqMsg.MSG_Pet.ReqPetEquipStrength:New()
_msg.cellId = partId
_msg.assistantId = assistantId
_msg:Send()
end
--激活强化目标
function PetEquipSystem:ReqPetEquipActiveInten(assistantId)
if self.CurPetCellsDic:ContainsKey(assistantId) then
local _cfg = DataConfig.DataPetEquipIntenClass[self.CurPetCellsDic[assistantId].TotalStrActiveID + 1]
if _cfg then
if self.CurPetCellsDic[assistantId].TotalStrLv >= _cfg.SuitLevel then
local _msg = ReqMsg.MSG_Pet.ReqPetEquipActiveInten:New()
_msg.assistantId = assistantId
_msg.strengthActiveId = _cfg.Id
_msg:Send()
else
GameCenter.MsgPromptSystem:ShowPrompt(UIUtils.CSFormat(DataConfig.DataMessageString.Get("C_PETEQUIP_TOTALSTR_TIPS"), _cfg.SuitLevel, self.CurPetCellsDic[assistantId].TotalStrLv))
end
else
GameCenter.MsgPromptSystem:ShowPrompt(DataConfig.DataMessageString.Get("C_PETEQUIP_MAXLV"))
end
end
end
--附魂装备
function PetEquipSystem:ReqPetEquipSoul(partId, assistantId)
local _msg = ReqMsg.MSG_Pet.ReqPetEquipSoul:New()
_msg.cellId = partId
_msg.assistantId = assistantId
_msg:Send()
end
--激活全身附魂效果
function PetEquipSystem:ReqPetEquipActiveSoul(assistantId)
if self.CurPetCellsDic:ContainsKey(assistantId) then
local _cfg = DataConfig.DataPetEquipSoulboundClass[self.CurPetCellsDic[assistantId].TotalSoulActiveID + 1]
if _cfg then
if self.CurPetCellsDic[assistantId].TotalSoulLv >= _cfg.SuitLevel then
local _msg = ReqMsg.MSG_Pet.ReqPetEquipActiveSoul:New()
_msg.assistantId = assistantId
_msg.soulActiveId = _cfg.Id
_msg:Send()
else
GameCenter.MsgPromptSystem:ShowPrompt(UIUtils.CSFormat(DataConfig.DataMessageString.Get("C_PETEQUIP_SOULLVLESS"), _cfg.SuitLevel, self.CurPetCellsDic[assistantId].TotalSoulLv))
end
else
GameCenter.MsgPromptSystem:ShowPrompt(DataConfig.DataMessageString.Get("C_PETEQUIP_MAXLV"))
end
end
end
------------------------------数据请求end--------------------------
------------------------------数据返回begin--------------------------
--发送宠物列表
function PetEquipSystem:ResPetCellsList(list)
self.CurPetCellsDic:Clear()
for i = 1, #list do
local _tmp = {}
_tmp.CellID = list[i].assistantId
if list[i].petId then
_tmp.PetID = list[i].petId
else
_tmp.PetID = 0
end
if list[i].strengthActiveId then
_tmp.TotalStrActiveID = list[i].strengthActiveId
else
_tmp.TotalStrActiveID = 0
end
if list[i].soulActiveId then
_tmp.TotalSoulActiveID = list[i].soulActiveId
else
_tmp.TotalSoulActiveID = 0
end
if list[i].score then
_tmp.Score = list[i].score
else
_tmp.Score = 0
end
_tmp.EquipCellDic = Dictionary:New()
_tmp.TotalStrLv = 0
_tmp.TotalSoulLv = 0
if list[i].cellList then
for j = 1, #list[i].cellList do
local _equipTmp = {}
_equipTmp.CellID = list[i].cellList[j].cellId
if list[i].cellList[j].strengthLv then
_equipTmp.StrengthLv = list[i].cellList[j].strengthLv
else
_equipTmp.StrengthLv = 0
end
_tmp.TotalStrLv = _tmp.TotalStrLv + _equipTmp.StrengthLv
if list[i].cellList[j].soulLv then
_equipTmp.SoulLv = list[i].cellList[j].soulLv
else
_equipTmp.SoulLv = 0
end
_tmp.TotalSoulLv = _tmp.TotalSoulLv + _equipTmp.SoulLv
if list[i].cellList[j].equip then
_equipTmp.EquipInfo = LuaItemBase.CreateItemBaseByMsg(list[i].cellList[j].equip)
else
_equipTmp.EquipInfo = nil
end
_tmp.EquipCellDic:Add(_equipTmp.CellID, _equipTmp)
end
end
if list[i].open then
_tmp.IsOpen = true
_tmp.Condition = nil
_tmp.Index = _tmp.CellID
else
_tmp.Index = _tmp.CellID + 1000
_tmp.IsOpen = false
local _keys = _tmp.EquipCellDic:GetKeys()
local _cfg = DataConfig.DataPetEquipUnlock[_tmp.CellID * 10000 + _keys[1]]
if _cfg then
if _cfg.SiteUnlock and _cfg.SiteUnlock ~= "" then
_tmp.Condition = _cfg.SiteUnlock
elseif _cfg.SiteUnlockItem and _cfg.SiteUnlockItem ~= "" then
_tmp.Condition = _cfg.SiteUnlockItem
end
end
end
self.CurPetCellsDic:Add(list[i].assistantId, _tmp)
end
self.CurPetCellsDic:SortValue(
function(a, b)
return a.Index < b.Index
end
)
self.IsSetRed = true
self:SetEquipStrengthRed()
self:SetEquipSoulRed()
self:SetPetFightRed()
end
--更换助战宠物返回
function PetEquipSystem:ResChangeAssiPet(msg)
if self.CurPetCellsDic[msg.assistantId] then
self.CurPetCellsDic[msg.assistantId].PetID = msg.petModelId
end
self.IsSetRed = true
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_PETEQUIP_PETLISTUPDATE)
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_REFRESH_ASSIST_PET)
end
function PetEquipSystem:ResPetAssistantScoreUpdate(msg)
if self.CurPetCellsDic[msg.assistantId] then
self.CurPetCellsDic[msg.assistantId].Score = msg.score
end
end
--穿戴装备返回
function PetEquipSystem:ResEquipWear(msg)
if self.CurPetCellsDic[msg.assistantId] then
local _list = self.CurPetCellsDic[msg.assistantId].EquipCellDic
_list:ForeachCanBreak(function(k, v)
if k == msg.cellId then
v.EquipInfo = LuaItemBase.CreateItemBase(msg.equipModelId)
if v.EquipInfo then
v.EquipInfo.DBID = msg.equipId
end
end
end)
end
self.IsSetRed = true
self:SetEquipStrengthRed()
self:SetEquipSoulRed()
self:SetPetFightRed()
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_PETEQUIP_WEARUPDATE, msg.assistantId)
end
--写下装备返回
function PetEquipSystem:ResPetEquipUnWear(msg)
if self.CurPetCellsDic[msg.assistantId] then
local _list = self.CurPetCellsDic[msg.assistantId].EquipCellDic
_list:ForeachCanBreak(function(k, v)
if k == msg.cellId then
v.EquipInfo = nil
end
end)
end
self.IsSetRed = true
self:SetEquipStrengthRed()
self:SetEquipSoulRed()
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_PETEQUIP_WEARUPDATE, msg.assistantId)
end
--强化装备返回
function PetEquipSystem:ResPetEquipStrength(msg)
if self.CurPetCellsDic[msg.assistantId] then
local _lv = 0
self.CurPetCellsDic[msg.assistantId].EquipCellDic:ForeachCanBreak(function(k, v)
if k == msg.cellId then
v.StrengthLv = msg.strengthLv
end
_lv = _lv + v.StrengthLv
end)
self.CurPetCellsDic[msg.assistantId].TotalStrLv = _lv
end
self:SetEquipStrengthRed()
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_PETEQUIP_STRENGTHRESULT, true)
end
--附魂装备返回
function PetEquipSystem:ResPetEquipSoul(msg)
if self.CurPetCellsDic[msg.assistantId] then
local _lv = 0
self.CurPetCellsDic[msg.assistantId].EquipCellDic:ForeachCanBreak(function(k, v)
if k == msg.cellId then
v.SoulLv = msg.soulLv
end
_lv = _lv + v.SoulLv
end)
self.CurPetCellsDic[msg.assistantId].TotalSoulLv = _lv
end
self:SetEquipSoulRed()
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_PETEQUIP_SoulRESULT, true)
end
--激活全身强化效果返回
function PetEquipSystem:ResPetEquipActiveInten(msg)
if self.CurPetCellsDic[msg.assistantId] then
self.CurPetCellsDic[msg.assistantId].TotalStrActiveID = msg.strengthActiveId
GameCenter.RedPointSystem:RemoveFuncCondition(FunctionStartIdCode.PetEquipStrength, msg.assistantId*1000)
local _cfg = DataConfig.DataPetEquipIntenClass[msg.strengthActiveId + 1]
if _cfg then
if _cfg.SuitLevel <= self.CurPetCellsDic[msg.assistantId].TotalStrLv then
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.PetEquipStrength, msg.assistantId*1000, RedPointCustomCondition(true))
else
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.PetEquipStrength, msg.assistantId*1000, RedPointCustomCondition(false))
end
end
end
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_PETEQUIP_TOTALSTRENGTHRESULT, true)
end
--激活全身附魂效果返回
function PetEquipSystem:ResPetEquipActiveSoul(msg)
if self.CurPetCellsDic[msg.assistantId] then
self.CurPetCellsDic[msg.assistantId].TotalSoulActiveID = msg.soulActiveId
GameCenter.RedPointSystem:RemoveFuncCondition(FunctionStartIdCode.PetEquipFuhun, msg.assistantId*1000)
local _cfg = DataConfig.DataPetEquipSoulboundClass[msg.soulActiveId + 1]
if _cfg then
if _cfg.SuitLevel <= self.CurPetCellsDic[msg.assistantId].TotalSoulLv then
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.PetEquipFuhun, msg.assistantId*1000, RedPointCustomCondition(true))
else
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.PetEquipFuhun, msg.assistantId*1000, RedPointCustomCondition(false))
end
end
end
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_PETEQUIP_TotalSoulRESULT, true)
end
--装备合成返回
function PetEquipSystem:ResPetEquipSynthesis(msg)
if self.CurPetCellsDic[msg.assistantId] then
local _list = self.CurPetCellsDic[msg.assistantId].EquipCellDic
_list:ForeachCanBreak(function(k, v)
if k == msg.cellId and msg.newEquip then
v.EquipInfo = LuaItemBase.CreateItemBaseByMsg(msg.newEquip)
if v.EquipInfo then
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_PETEQUIP_WEARUPDATE, msg.assistantId)
end
end
end)
end
self.IsSetRed = true
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_PETEQUIP_SYNTHRESULT, msg.success)
end
--装备自动分解设置保存返回
function PetEquipSystem:ResPetEquipDecomposeSetting(msg)
self.IsAutoSplit = msg.set
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_UPDATEAUTOSMELTSTATE)
end
------------------------------数据返回end--------------------------
return PetEquipSystem