Files
Main/Assets/GameAssets/Resources/Lua/Logic/NewFashion/NewFashionSystem.lua

887 lines
25 KiB
Lua
Raw Normal View History

2025-01-25 04:38:09 +08:00
------------------------------------------------
--作者: 王圣
--日期: 2020-03-23
--文件: NewFashionSystem.lua
--模块: NewFashionSystem
--描述: 新时装系统类
------------------------------------------------
--引用
--图鉴数据
local L_TuJianData = require "Logic.NewFashion.FashionTuJianData"
local L_FashionData = require "Logic.NewFashion.FashionData"
local L_ListTuJianData = List:New()
local L_ListFashionData = List:New()
local L_DicFashionData = Dictionary:New()
local L_DicTotalFashionData = Dictionary:New()
local L_RedPointItemCondition = CS.Thousandto.Code.Logic.RedPointItemCondition
local NewFashionSystem = {
DefaultList = List:New(),
IsShowActive = false,
--玩家穿戴时装字典
WearDic = Dictionary:New(),
}
function NewFashionSystem:Initialize()
end
function NewFashionSystem:UnInitialize()
-- L_ListTuJianData:Clear()
-- L_ListFashionData:Clear()
end
--更新玩家穿戴列表
function NewFashionSystem:UpdateWearList(wearList)
if wearList == nil then
return
end
--更新时装的穿戴
self:UpdateWearFashion(wearList)
--更新衣柜的穿戴
self:UpdateTotalWear(wearList)
end
--添加进穿戴字典
function NewFashionSystem:SetWearData(data, type)
self.WearDic[type] = data
end
--改时装是否穿戴
function NewFashionSystem:IsWear(data)
if data == nil then
return false
end
local type = data:GetType()
local wearData = self.WearDic[type]
return data:GetCfgId() == wearData:GetCfgId()
end
--时装激活升星红点更新
function NewFashionSystem:UpdateFashionRedPoint()
GameCenter.RedPointSystem:CleraFuncCondition(FunctionStartIdCode.Fashion)
local dic = self:GetFashionDataDic()
if dic == nil then
return
end
local keys = dic:GetKeys()
if keys == nil then
return
end
local isShow = false
local occ = GameCenter.GameSceneSystem:GetLocalPlayer().IntOcc
for i = 1, #keys do
local dataList = dic[keys[i]]
if dataList ~= nil then
for m = 1, #dataList do
local data = dataList[m]
if data.IsActive then
--如果时装激活了 就判断是否可以升星
if not isShow then
isShow = data:CanUpStar(occ)
end
if data.StarNum < 5 then
local itemId = data:GetItemId(occ)
local needNum = data:GetNeedItemNum(data.StarNum)
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.Fashion, data:GetCfgId(), L_RedPointItemCondition(itemId, needNum))
end
else
--如果没有激活 判断是否可以激活
if not isShow then
isShow = data:CanActive(occ)
end
local itemId = data:GetItemId(occ)
local needNum = data:GetNeedItemNum(0)
GameCenter.RedPointSystem:AddFuncCondition(FunctionStartIdCode.Fashion, data:GetCfgId(), L_RedPointItemCondition(itemId, needNum))
end
end
end
end
--GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.Fashion,isShow)
end
--时装图鉴红点更新
function NewFashionSystem:UpdateTjRedPoint()
local dataList = self:GetTuJianDatas()
if dataList == nil then
return
end
local isShow = false
for i = 1, #dataList do
local data = dataList[i]
if data.IsActive then
--如果激活了
local lowStarNum = self:GetLowStarLv(i)
if data.StarNum < lowStarNum and not isShow then
isShow = true
break
end
else
--没有激活
local allActive = GameCenter.NewFashionSystem:IsCollectAll(i)
if allActive and not isShow then
isShow = true
break
end
end
end
GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.FashionTj,isShow)
end
--时装衣柜红点更新
function NewFashionSystem:UpdateTotalRedPoint()
local dic = self:GetTotalDataDic()
if dic == nil then
return
end
local keys = dic:GetKeys()
if keys == nil then
return
end
local isShow = false
for i = 1, #keys do
local dataList = dic[keys[i]]
if dataList ~= nil then
for m = 1 ,#dataList do
local data = dataList[m]
if data.IsNew and not isShow and data:GetType() <= 10 then
isShow = true
end
end
end
end
GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.Wardrobe,isShow)
end
-----------------------------------------------------消息-----------------------------------------------------
--请求激活时装
function NewFashionSystem:ReqActiveFashion(id)
GameCenter.Network.Send("MSG_NewFashion.ReqActiveFashion", {fashionID = id})
end
--请求穿戴时装
function NewFashionSystem:ReqSaveFashion(ids)
GameCenter.Network.Send("MSG_NewFashion.ReqSaveFashion", {wearIds = ids})
end
--请求激活图鉴
function NewFashionSystem:ReqActiveTj(id)
GameCenter.Network.Send("MSG_NewFashion.ReqActiveTj", {tjID = id})
end
--请求时装升星
function NewFashionSystem:ReqTjStar(id)
GameCenter.Network.Send("MSG_NewFashion.ReqTjStar", {tjID = id})
end
--请求图鉴升星
function NewFashionSystem:ReqFashionStar(id)
GameCenter.Network.Send("MSG_NewFashion.ReqFashionStar", {fashionID = id})
end
--上线发送的激活了的时装列表
function NewFashionSystem:ResOnlineInitFashionInfo(msg)
if msg == nil then
return
end
self:UpdateActiveFashion(msg.activeIds)
self:UpdateTotalActive(msg.activeIds)
self:UpdateWearList(msg.wearData)
self:UpdateTjDatas(msg.activeTjs)
--更新红点
self:UpdateFashionRedPoint()
self:UpdateTjRedPoint()
self:UpdateTotalRedPoint()
end
--穿戴(激活)时装后的返回
function NewFashionSystem:ResSaveFashionResult(msg)
if msg == nil then
return
end
if msg.isActivate then
--有新的时装激活
local list = List:New()
list:Add(msg.activateID)
self:UpdateActiveFashion(list)
self:UpdateTotalActive(list)
--展示新时装模型
if msg.activateID ~= nil then
local data = self:GetFashionData(msg.activateID.fashionID)
if data ~= nil then
data.IsNew = true
end
data = self:GetTotalData(msg.activateID.fashionID)
if data ~= nil then
if data:GetCfg().IfNew == 0 then
data.IsNew = true
end
local _iswear = true
local type = data:GetType()
if type == FashionType.Body then
type = ShowModelType.Player
elseif type == FashionType.Weapon then
type = ShowModelType.LpWeapon
elseif type == FashionType.Wing then
type = ShowModelType.Wing
elseif type == FashionType.Mount then
type = ShowModelType.Mount
_iswear = false
elseif type == FashionType.Pet then
type = ShowModelType.Pet
_iswear = false
elseif type == FashionType.FaBao then
type = ShowModelType.FaBao
_iswear = false
elseif type == FashionType.HunJia then
type = ShowModelType.SoulEquip
end
local occ = GameCenter.GameSceneSystem:GetLocalPlayer().IntOcc
-- if type == ShowModelType.Player or type == ShowModelType.LpWeapon then
-- GameCenter.ModelViewSystem:ShowModel(type, data:GetModelId(occ), 200, 0 , data:GetName(), true, msg.activateID.fashionID)
-- end
if data.Cfg.IsShow == 1 then
GameCenter.ModelViewSystem.IsStartTaskOnHide = data.Cfg.IsTask == 1
GameCenter.ModelViewSystem:ShowModel(type, data:GetModelId(occ), data.Cfg.ShowCameraSize, data.Cfg.ShowModelYPos/100 , data:GetName(), _iswear, msg.activateID.fashionID)
end
end
self:UpdateTjData(msg.activateID.fashionID)
end
end
--没有时装激活只是穿戴更新
self:UpdateWearList(msg.retData)
if msg.retData ~= nil then
--更新图鉴数据
for i = 1, #msg.retData do
local acData = msg.retData[i]
self:UpdateTjData(acData.fashionID)
end
end
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_FASHION_ACTIVE_RESULT)
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_NEWFASHION_CHANGE)
--更新红点
self:UpdateFashionRedPoint()
self:UpdateTjRedPoint()
self:UpdateTotalRedPoint()
end
--时装升星返回
function NewFashionSystem:ResFashionStarResult(msg)
if msg == nil then
return
end
self:UpdateFashion(msg.retData)
self:UpdateTjData(msg.retData.fashionID)
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_FASHION_UPSTAR_RESULT)
self:UpdateFashionRedPoint()
self:UpdateTjRedPoint()
end
--图鉴激活返回
function NewFashionSystem:ResActiveTjResult(msg)
if msg == nil then
return
end
local data = self:GetTuJianData(msg.tjData.tjID)
if data ~= nil then
data.IsActive = true
end
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_FASHION_TUJIAN_ACTIVE)
self:UpdateTjRedPoint()
end
--图鉴升星返回
function NewFashionSystem:ResTjStarResult(msg)
if msg == nil then
return
end
local data = self:GetTuJianData(msg.tjData.tjID)
if data ~= nil then
data.StarNum = msg.tjData.star
end
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_FASHION_TUJIAN_UPSTAR)
self:UpdateTjRedPoint()
end
--广播装备新时装,,发生改变后广播 当前地图 范围内玩家
function NewFashionSystem:ResNewFashionBodyBroadcast(msg)
local player = GameCenter.GameSceneSystem:FindPlayer(msg.playerId)
if player == nil then
return
end
if msg.retData ~= nil then
for i = 1, #msg.retData do
local ret = msg.retData[i]
if ret.type == FashionType.Body then
player.FashionBodyID = ret.fashionID
elseif ret.type == FashionType.Weapon then
player.FashionWeaponID = ret.fashionID
elseif ret.type == FashionType.Wing then
player.WingID = ret.fashionID
player:EquipWithType(FSkinPartCode.Wing, RoleVEquipTool.GetLPWingModel())
end
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_FASHION_UPDATECHANGE)
end
end
end
--=======================================衣柜处理--=======================================
--获取衣柜的所有数据
function NewFashionSystem:GetTotalDataDic()
if L_DicTotalFashionData:Count() == 0 then
DataConfig.DataFashionTotal:Foreach(function(k, v)
local data = L_FashionData:New(k,v)
local list = nil
if L_DicTotalFashionData:ContainsKey(v.Type) then
list = L_DicTotalFashionData[v.Type]
list:Add(data)
else
list = List:New()
list:Add(data)
L_DicTotalFashionData:Add(v.Type, list)
end
end)
end
return L_DicTotalFashionData
end
--获取衣柜中激活的时装列表
function NewFashionSystem:GetTotalActiveList(type)
local dic = self:GetTotalDataDic()
if dic == nil then
return nil
end
local activeList = List:New()
local list = dic[type]
if list == nil then
return nil
end
for i = 1, #list do
local data = list[i]
if data.IsActive and data:GetType() <= 10 then
activeList:Add(data)
end
end
return activeList
end
--获取衣柜中的时装数据
function NewFashionSystem:GetTotalData(fashionId)
local dic = self:GetTotalDataDic()
if dic == nil then
return nil
end
local keys = dic:GetKeys()
if keys == nil then
return nil
end
for i = 1, #keys do
local key = keys[i]
local dataList = dic[key]
if dataList ~= nil then
for m = 1, #dataList do
local data = dataList[m]
if data:GetCfgId() == fashionId then
return data
end
end
end
end
return nil
end
--判断是否有新激活的时装
function NewFashionSystem:HaveNewByType(type)
local list = self:GetTotalActiveList(type)
if list == nil then
return false
end
local ret = false
for i = 1, #list do
local data = list[i]
if not ret and data.IsNew then
ret = true
end
end
return ret
end
--是否激活
function NewFashionSystem:IsActive(fashionId)
local data = self:GetTotalData(fashionId)
if data == nil then
return false
end
return data.IsActive
end
function NewFashionSystem:GetTotalDataByModelId(id, occ)
local dic = self:GetTotalDataDic()
--IsEquialWithModelId
if dic == nil then
return nil
end
local keys = dic:GetKeys()
if keys == nil then
return
end
for i = 1, #keys do
local key = keys[i]
local dataList = dic[key]
if dataList ~= nil then
for m = 1, #dataList do
local data = dataList[m]
if data:IsEquialWithModelId(id, occ) then
return data
end
end
end
end
return nil
end
function NewFashionSystem:UpdateTotalActive(dataList)
local dic = self:GetTotalDataDic()
if dic == nil then
return
end
if dataList == nil then
return
end
for i = 1, #dataList do
local acData = dataList[i]
local list = dic[acData.type]
if list ~= nil then
for m = 1, #list do
local data = list[m]
if data:GetCfgId() == acData.fashionID then
data.IsActive = true
end
end
end
end
end
--更新衣柜的穿戴
function NewFashionSystem:UpdateTotalWear(dataList)
local dic = self:GetTotalDataDic()
if dic == nil then
return
end
if dataList == nil then
return
end
for i = 1, #dataList do
local acData = dataList[i]
local list = dic[acData.type]
if list ~= nil then
for m = 1, #list do
local data = list[m]
data.IsWear = false
if data:GetCfgId() == acData.fashionID then
data.IsWear = true
self:SetWearData(data, acData.type)
end
end
end
end
end
--=======================================图鉴处理--=======================================
--获取图鉴数据
function NewFashionSystem:GetTuJianDatas()
if #L_ListTuJianData == 0 then
--初始化图鉴数据
DataConfig.DataFashionLink:Foreach(function(k, v)
local data = L_TuJianData:New(k,v)
L_ListTuJianData:Add(data)
end)
end
return L_ListTuJianData
end
--根据index获取图鉴数据
function NewFashionSystem:GetTuJianData(index)
local dataList = self:GetTuJianDatas()
if dataList ~= nil and index <= #dataList then
return dataList[index]
end
return nil
end
--获取index对应图鉴里时装的最低星级
function NewFashionSystem:GetLowStarLv(index)
local ret = 999
local data = nil
local dataList = self:GetTuJianDatas()
if dataList ~= nil and index <= #dataList then
data = dataList[index]
local fashionList = data:GetNeedDataList()
if fashionList == nil then
return ret
end
for i = 1, #fashionList do
local id = fashionList[i].FashionId
local fashionData = self:GetFashionData(id)
local num = fashionData:GetStarNum()
if ret > num then
ret = num
end
end
end
return ret
end
--判断index对应图鉴需要的时装是否都收集齐了
function NewFashionSystem:IsCollectAll(index)
local data = nil
local dataList = self:GetTuJianDatas()
if dataList ~= nil and index <= #dataList then
data = dataList[index]
local fashionList = data:GetNeedDataList()
if fashionList == nil then
return false
end
for i = 1, #fashionList do
local isActive = fashionList[i].IsActive
if not isActive then
return false
end
end
end
return true
end
--更新图鉴数据
function NewFashionSystem:UpdateTjDatas(activeTjs)
local dataList = self:GetTuJianDatas()
if dataList == nil then
return
end
for i = 1, #dataList do
local data = dataList[i]
data:UpdateNeedDataList()
end
if activeTjs ~= nil then
for i = 1, #dataList do
dataList[i].IsActive = false
end
for i = 1, #activeTjs do
for m = 1, #dataList do
if dataList[m]:GetCfgId() == activeTjs[i].tjID then
dataList[m].IsActive = true
dataList[m].StarNum = activeTjs[i].star
end
end
end
end
end
--更新图鉴数据
function NewFashionSystem:UpdateTjData(fashionId)
local fashionData = self:GetFashionData(fashionId)
local dataList = self:GetTuJianDatas()
if dataList == nil then
return
end
for i = 1, #dataList do
local data = dataList[i]
data:SetNeedData(fashionData)
end
end
--=======================================时装处理--=======================================
--获取时装的所有数据
function NewFashionSystem:GetFashionDatas()
if #L_ListFashionData == 0 then
--初始化图鉴数据
DataConfig.DataFashion:Foreach(function(k, v)
local data = L_FashionData:New(k,v)
L_ListFashionData:Add(data)
end)
end
return L_ListFashionData
end
--获取时装所有数据
function NewFashionSystem:GetFashionDataDic()
if L_DicFashionData:Count() == 0 then
DataConfig.DataFashion:Foreach(function(k, v)
local data = L_FashionData:New(k,v)
local list = nil
if L_DicFashionData:ContainsKey(v.Type) then
list = L_DicFashionData[v.Type]
list:Add(data)
else
list = List:New()
list:Add(data)
L_DicFashionData:Add(v.Type, list)
end
end)
end
return L_DicFashionData
end
--获取type对应的时装列表
function NewFashionSystem:GetFashionList(type)
local retList = List:New()
local dic = self:GetFashionDataDic()
if dic ~= nil then
local list = dic[type]
if list ~= nil then
for i = 1, #list do
local data = list[i]
if data:GetCfg().IsHide ~= 1 then
retList:Add(data)
end
end
end
end
return retList
end
function NewFashionSystem:GetAllFashionList(type)
local retList = nil
local dic = self:GetFashionDataDic()
if dic ~= nil then
retList = dic[type]
end
return retList
end
--获取时装数据
function NewFashionSystem:GetFashionData(fashionId)
local dic = self:GetFashionDataDic()
if dic == nil then
return nil
end
local keys = dic:GetKeys()
if #keys == 0 then
return nil
end
for i = 1,#keys do
local list = dic[keys[i]]
for m = 1,#list do
local data = list[m]
if data:GetCfgId() == fashionId then
return data
end
end
end
return nil
end
--更新时装
function NewFashionSystem:UpdateFashion(data)
local dic = self:GetFashionDataDic()
if dic == nil then
return
end
if data == nil then
return
end
local list = dic[data.type]
if list ~= nil then
for m = 1, #list do
if list[m]:GetCfgId() == data.fashionID then
list[m].StarNum = data.star
end
end
end
end
--更新时装激活数据
function NewFashionSystem:UpdateActiveFashion(dataList)
local dic = self:GetFashionDataDic()
if dic == nil then
return
end
if dataList == nil then
return
end
for i = 1, #dataList do
local acData = dataList[i]
local list = dic[acData.type]
if list ~= nil then
for m = 1, #list do
local data = list[m]
if data:GetCfgId() == acData.fashionID then
data.IsActive = true
data.StarNum = acData.star
end
end
end
end
end
--更新时装穿戴数据
function NewFashionSystem:UpdateWearFashion(dataList)
local dic = self:GetFashionDataDic()
if dic == nil then
return
end
if dataList == nil then
return
end
for i = 1, #dataList do
local acData = dataList[i]
local list = dic[acData.type]
if list ~= nil then
for m = 1, #list do
local data = list[m]
data.IsWear = false
if data:GetCfgId() == acData.fashionID then
data.IsWear = true
data.StarNum = acData.star
self:SetWearData(data, acData.type)
end
end
end
end
end
--获取头像数据
function NewFashionSystem:GetPlayerHeadData()
local ret = nil
local list = self:GetAllFashionList(ShowModelType.Head)
if list ~= nil then
for i = 1, #list do
local data = list[i]
if data.IsActive and data.IsWear then
ret = data
break
end
end
end
return ret
end
--获取头像框数据
function NewFashionSystem:GetPlayerHeadFrameData()
local ret = nil
local list = self:GetAllFashionList(ShowModelType.Frame)
if list ~= nil then
for i = 1, #list do
local data = list[i]
if data.IsActive and data.IsWear then
ret = data
break
end
end
end
return ret
end
--获取聊天泡泡数据
function NewFashionSystem:GetPlayerPaoPaoData()
local ret = nil
local list = self:GetAllFashionList(ShowModelType.PaoPao)
if list ~= nil then
for i = 1, #list do
local data = list[i]
if data.IsActive and data.IsWear then
ret = data
break
end
end
end
return ret
end
function NewFashionSystem:GetPlayerHeadDataById(id)
local ret = nil
local list = self:GetAllFashionList(ShowModelType.Head)
if list ~= nil then
for i = 1, #list do
local data = list[i]
if data:GetCfgId() == id then
ret = data
break
end
end
end
return ret
end
function NewFashionSystem:GetPlayerHeadFrameDataById(id)
local ret = nil
local list = self:GetAllFashionList(ShowModelType.Frame)
if list ~= nil then
for i = 1, #list do
local data = list[i]
if data:GetCfgId() == id then
ret = data
break
end
end
end
return ret
end
function NewFashionSystem:GetPlayerPaoPaoDataById(id)
local ret = nil
local list = self:GetAllFashionList(ShowModelType.PaoPao)
if list ~= nil then
for i = 1, #list do
local data = list[i]
if data:GetCfgId() == id then
ret = data
break
end
end
end
return ret
end
--获取默认头像数据
function NewFashionSystem:GetPlayerHeadDefaultData()
local ret = nil
local list = self:GetAllFashionList(ShowModelType.Head)
if list ~= nil then
for i = 1, #list do
local data = list[i]
if data:GetCfg().IsHide == 1 then
ret = data
break
end
end
end
return ret
end
--获取默认头像框数据
function NewFashionSystem:GetPlayerHeadFrameDefaultData()
local ret = nil
local list = self:GetAllFashionList(ShowModelType.Frame)
if list ~= nil then
for i = 1, #list do
local data = list[i]
if data:GetCfg().IsHide == 1 then
ret = data
break
end
end
end
return ret
end
--获取默认聊天泡泡数据
function NewFashionSystem:GetPlayerPaoPaoDefaultData()
local ret = nil
local list = self:GetAllFashionList(ShowModelType.PaoPao)
if list ~= nil then
for i = 1, #list do
local data = list[i]
if data:GetCfg().IsHide == 1 then
ret = data
break
end
end
end
return ret
end
return NewFashionSystem