2024-09-01 20:49:41 +00:00
|
|
|
|
---理器
|
2023-07-14 19:35:33 +00:00
|
|
|
|
---
|
|
|
|
|
XFurnitureManagerCreator = function()
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@class XFurnitureManager 家具管理器
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local XFurnitureManager = {}
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
---@type table<number, XHomeFurnitureData>
|
|
|
|
|
local FurnitureDatas = {} -- 家具数据 table = {id = XHomeFurnitureData}
|
|
|
|
|
local OtherFurnitureDatas = {} -- 家具数据(其他人的) table = {id = XHomeFurnitureData}
|
|
|
|
|
local FurnitureCategoryTypes = {} -- 家具类型 table = {FurnitureTypeId = {ids}}
|
|
|
|
|
local FurnitureSingleUnUse = {} -- ConfigId家具未使用列表 table = {FurnitureConfigId = {ids}}
|
|
|
|
|
local FurnitureCreateDatas = {} -- 家具创建列表
|
|
|
|
|
local CollectNoneRoomFurnitureList = {} -- 空收藏场景表
|
|
|
|
|
local FurnitureDatasCount = 0 -- 擁有家具总数
|
|
|
|
|
local IsInReforming = false -- 是否在家具摆放中
|
|
|
|
|
local NewSuitFurnitureData = {} -- 新套装家具数据
|
|
|
|
|
local MaxFurnitureRecordMap -- 最高分家具记录
|
|
|
|
|
local ShowDetailData = {
|
|
|
|
|
ConfigId = 0,
|
|
|
|
|
IsOwn = false
|
|
|
|
|
}
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local function GetCookieKey(key)
|
|
|
|
|
return string.format("DORM_CACHE_UID_%s_NEW_HINT_%s", tostring(XPlayer.Id), key)
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local FurnitureRequest = {
|
2024-09-01 20:49:41 +00:00
|
|
|
|
DecomposeFurniture = "DecomposeFurnitureRequest", --分解家具
|
|
|
|
|
CreateFurniture = "CreateFurnitureRequest", --建造家具
|
|
|
|
|
CheckCreateFurniture = "CheckCreateFurnitureRequest", --领取家具
|
|
|
|
|
RemouldFurniture = "RemouldFurnitureRequest", --改造家具
|
|
|
|
|
PutFurniture = "PutFurnitureRequest", --家具摆放
|
|
|
|
|
FurnitureRemake = "FurnitureRemakeRequest", --重新建造家具
|
|
|
|
|
SetFurnitureLock = "SetFurnitureOptLockRequest", --锁定或解锁家具
|
2023-07-14 19:35:33 +00:00
|
|
|
|
}
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
local HandleUiMap = {
|
|
|
|
|
UiFurnitureObtain = true,
|
|
|
|
|
UiFurnitureDetail = true,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
--- 界面可操作
|
|
|
|
|
---@param evt string 事件名
|
|
|
|
|
---@param args System.Object[]
|
|
|
|
|
--------------------------
|
|
|
|
|
local function OnUiOpenDone(evt, args)
|
|
|
|
|
---@type XGameUi
|
|
|
|
|
local ui = args[0]
|
|
|
|
|
if not ui or not ui.UiData then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local uiName = ui.UiData.UiName
|
|
|
|
|
if not HandleUiMap[uiName] then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if XTool.IsTableEmpty(NewSuitFurnitureData) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local showSuitId
|
|
|
|
|
--展示了不是自己已有的家具
|
|
|
|
|
if uiName == "UiFurnitureDetail" then
|
|
|
|
|
if not ShowDetailData.IsOwn then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
for suid, configId2IdMap in pairs(NewSuitFurnitureData) do
|
|
|
|
|
if configId2IdMap[ShowDetailData.ConfigId] then
|
|
|
|
|
showSuitId = suid
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if not showSuitId then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local targetUiName = "UiDormArchiveUnlock"
|
|
|
|
|
if XLuaUiManager.IsUiShow(targetUiName)
|
|
|
|
|
or XLuaUiManager.IsUiLoad(targetUiName) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local asyncOpenArchive = asynTask(function(suitId, furnitureIds, cb)
|
|
|
|
|
XLuaUiManager.Open(targetUiName, suitId, furnitureIds, cb)
|
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
RunAsyn(function()
|
|
|
|
|
local removeSuit = {}
|
|
|
|
|
if showSuitId then
|
|
|
|
|
asyncOpenArchive(showSuitId, NewSuitFurnitureData[showSuitId])
|
|
|
|
|
table.insert(removeSuit, showSuitId)
|
|
|
|
|
else
|
|
|
|
|
for suid, configId2IdMap in pairs(NewSuitFurnitureData) do
|
|
|
|
|
asyncOpenArchive(suid, configId2IdMap)
|
|
|
|
|
table.insert(removeSuit, suid)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, suid in pairs(removeSuit) do
|
|
|
|
|
NewSuitFurnitureData[suid] = nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function Init()
|
|
|
|
|
CsXGameEventManager.Instance:RemoveEvent(CS.XEventId.EVENT_UI_DONE, OnUiOpenDone)
|
|
|
|
|
CsXGameEventManager.Instance:RegisterEvent(CS.XEventId.EVENT_UI_DONE, OnUiOpenDone)
|
|
|
|
|
--初始化记录
|
|
|
|
|
local recordMap = XSaveTool.GetData(GetCookieKey("MAX_FURNITURE_RECORD")) or {}
|
|
|
|
|
MaxFurnitureRecordMap = recordMap
|
|
|
|
|
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
function XFurnitureManager.InitFurnitureCreateList(response)
|
|
|
|
|
if not response or not response.FurnitureCreateList then return end
|
|
|
|
|
FurnitureCreateDatas = response.FurnitureCreateList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.InitData(furnitureList)
|
|
|
|
|
if not furnitureList or not next(furnitureList) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
-- MinorType 加入全部类型
|
|
|
|
|
FurnitureDatas = {}
|
|
|
|
|
FurnitureCategoryTypes = {}
|
|
|
|
|
FurnitureSingleUnUse = {}
|
|
|
|
|
|
|
|
|
|
FurnitureCategoryTypes[XFurnitureConfigs.FURNITURE_CATEGORY_ALL_ID] = {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local furnitureDatasCount = 0
|
|
|
|
|
for _, data in pairs(furnitureList) do
|
|
|
|
|
if FurnitureDatas[data.Id] then
|
|
|
|
|
XLog.Error("XFurnitureManager.InitData error:id is repeated, id = " .. data.Id)
|
|
|
|
|
else
|
|
|
|
|
FurnitureDatas[data.Id] = XHomeFurnitureData.New(data)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if data.DormitoryId <= 0 then
|
|
|
|
|
XFurnitureManager.AddFurnitureSingleUnUse(data.ConfigId, data.Id)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local typeConfig = XFurnitureConfigs.GetFurnitureTypeCfgByConfigId(data.ConfigId)
|
|
|
|
|
if not FurnitureCategoryTypes[typeConfig.Id] then
|
|
|
|
|
FurnitureCategoryTypes[typeConfig.Id] = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
table.insert(FurnitureCategoryTypes[typeConfig.Id], data.Id)
|
|
|
|
|
table.insert(FurnitureCategoryTypes[XFurnitureConfigs.FURNITURE_CATEGORY_ALL_ID], data.Id)
|
|
|
|
|
furnitureDatasCount = furnitureDatasCount + 1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
FurnitureDatasCount = furnitureDatasCount
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------start Data---------------------
|
|
|
|
|
-- 本地管理的红点 -> 移除
|
|
|
|
|
function XFurnitureManager.DeleteNewHint(ids)
|
|
|
|
|
local needSave = false
|
|
|
|
|
for _, id in ipairs(ids) do
|
|
|
|
|
local key = XPrefs.DormNewHint .. tostring(XPlayer.Id) .. id
|
|
|
|
|
if CS.UnityEngine.PlayerPrefs.HasKey(key) then
|
|
|
|
|
CS.UnityEngine.PlayerPrefs.DeleteKey(key)
|
|
|
|
|
needSave = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if needSave then
|
|
|
|
|
CS.UnityEngine.PlayerPrefs.Save()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 本地管理的红点 -> 增加Id 表示此红点不再出现!
|
|
|
|
|
function XFurnitureManager.AddNewHint(ids)
|
|
|
|
|
local needSave = false
|
|
|
|
|
for _, id in ipairs(ids) do
|
|
|
|
|
local key = XPrefs.DormNewHint .. tostring(XPlayer.Id) .. id
|
|
|
|
|
if not CS.UnityEngine.PlayerPrefs.HasKey(key) then
|
|
|
|
|
CS.UnityEngine.PlayerPrefs.SetString(key, key)
|
|
|
|
|
needSave = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if needSave then
|
|
|
|
|
CS.UnityEngine.PlayerPrefs.Save()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 本地管理的红点 -> 检查是否需要显示红点
|
|
|
|
|
-- 如果本地有存储 说明不需要显示
|
|
|
|
|
function XFurnitureManager.CheckNewHint(id)
|
|
|
|
|
local key = XPrefs.DormNewHint .. tostring(XPlayer.Id) .. id
|
|
|
|
|
return not CS.UnityEngine.PlayerPrefs.HasKey(key)
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
--是否为首次获得
|
|
|
|
|
function XFurnitureManager.IsFirstObtain(id)
|
|
|
|
|
local key = GetCookieKey(id)
|
|
|
|
|
if not XSaveTool.GetData(key) then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--标记为已经获得
|
|
|
|
|
function XFurnitureManager.MarkFirstObtain(id)
|
|
|
|
|
local key = GetCookieKey(id)
|
|
|
|
|
if XSaveTool.GetData(key) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
XSaveTool.SaveData(key, true)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.AddNewSuitFurnitureData(furnitureId)
|
|
|
|
|
if not XTool.IsNumberValid(furnitureId) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local furniture = XFurnitureManager.GetFurnitureById(furnitureId)
|
|
|
|
|
if not furniture then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local configId = furniture:GetConfigId()
|
|
|
|
|
if not XFurnitureManager.IsFirstObtain(configId) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local suitId = furniture:GetSuitId()
|
|
|
|
|
NewSuitFurnitureData[suitId] = NewSuitFurnitureData[suitId] or {}
|
|
|
|
|
NewSuitFurnitureData[suitId][configId] = furnitureId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.DelNewSuitFurnitureData(furnitureId)
|
|
|
|
|
if not XTool.IsNumberValid(furnitureId) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local furniture = XFurnitureManager.GetFurnitureById(furnitureId)
|
|
|
|
|
if not furniture then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local configId = furniture:GetConfigId()
|
|
|
|
|
local suitId = furniture:GetSuitId()
|
|
|
|
|
if not NewSuitFurnitureData[suitId] then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
NewSuitFurnitureData[suitId][configId] = nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.SetDetailData(isOwn, configId)
|
|
|
|
|
ShowDetailData.IsOwn = isOwn
|
|
|
|
|
ShowDetailData.ConfigId = configId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.AddMaxRecord(furnitureId)
|
|
|
|
|
if not XTool.IsNumberValid(furnitureId) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local furniture = XDataCenter.FurnitureManager.GetFurnitureById(furnitureId)
|
|
|
|
|
if not furniture then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local configId = furniture:GetConfigId()
|
|
|
|
|
local newScore = furniture:GetScore()
|
|
|
|
|
local oldScore = MaxFurnitureRecordMap[configId]
|
|
|
|
|
|
|
|
|
|
if oldScore and oldScore > newScore then --不必添加
|
|
|
|
|
return
|
|
|
|
|
else
|
|
|
|
|
MaxFurnitureRecordMap[configId] = newScore
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XSaveTool.SaveData(GetCookieKey("MAX_FURNITURE_RECORD"), MaxFurnitureRecordMap)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.RemoveMaxRecord(configId)
|
|
|
|
|
if not XTool.IsNumberValid(configId) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--不需要移除
|
|
|
|
|
if not MaxFurnitureRecordMap[configId] then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
MaxFurnitureRecordMap[configId] = nil
|
|
|
|
|
|
|
|
|
|
XSaveTool.SaveData(GetCookieKey("MAX_FURNITURE_RECORD"), MaxFurnitureRecordMap)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.CheckIsMaxScore(configId)
|
|
|
|
|
return MaxFurnitureRecordMap[configId] ~= nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.CheckIsMaxScoreByConfigIds(configIds)
|
|
|
|
|
if XTool.IsTableEmpty(configIds) then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
for _, configId in pairs(configIds) do
|
|
|
|
|
if XFurnitureManager.CheckIsMaxScore(configId) then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
-- 通过家具唯一Id 获取家具ConfigId
|
|
|
|
|
function XFurnitureManager.GetFurnitureConfigId(id, dormDataType)
|
|
|
|
|
local t = XFurnitureManager.GetFurnitureById(id, dormDataType)
|
|
|
|
|
return t.ConfigId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取家具配置表By 唯一Id
|
|
|
|
|
function XFurnitureManager.GetFurnitureConfigByUniqueId(uniqueId, dormDataType)
|
|
|
|
|
local t = XFurnitureManager.GetFurnitureById(uniqueId, dormDataType)
|
|
|
|
|
if not t then --海外修改,防止访问不存在ID时报错问题
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
return XFurnitureConfigs.GetFurnitureTemplateById(t.ConfigId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获取所有家具数据
|
|
|
|
|
function XFurnitureManager.GetFurnitureDatas()
|
|
|
|
|
return FurnitureDatas
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--获取所擁有家具总数
|
|
|
|
|
function XFurnitureManager.GetAllFurnitureCount()
|
|
|
|
|
return FurnitureDatasCount
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取家具
|
|
|
|
|
function XFurnitureManager.GetFurnitureById(ids, dormDataType)
|
|
|
|
|
local datas = FurnitureDatas
|
|
|
|
|
if dormDataType == XDormConfig.DormDataType.Target then
|
|
|
|
|
datas = OtherFurnitureDatas
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local func = function(id)
|
|
|
|
|
local t = datas[id]
|
|
|
|
|
if not t and t ~= nil then
|
|
|
|
|
XLog.Error("XFurnitureManager.GetFurnitureById error:id is not found, id = " .. id)
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return t
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if type(ids) == "table" then
|
|
|
|
|
local furnitureDatas = {}
|
|
|
|
|
for _, id in ipairs(ids) do
|
|
|
|
|
local furnitureData = func(id)
|
|
|
|
|
table.insert(furnitureDatas, furnitureData)
|
|
|
|
|
end
|
|
|
|
|
return furnitureDatas
|
|
|
|
|
else
|
|
|
|
|
local furnitureData = func(ids)
|
|
|
|
|
return furnitureData
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.AddFurnitureSingleUnUse(configId, id)
|
|
|
|
|
if not FurnitureSingleUnUse[configId] then
|
|
|
|
|
FurnitureSingleUnUse[configId] = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
table.insert(FurnitureSingleUnUse[configId], id)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.RemoveFurnitureSingleUnUse(configId, id)
|
|
|
|
|
if not FurnitureSingleUnUse[configId] then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local index
|
|
|
|
|
for i, v in ipairs(FurnitureSingleUnUse[configId]) do
|
|
|
|
|
if id == v then
|
|
|
|
|
index = i
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if index then
|
|
|
|
|
table.remove(FurnitureSingleUnUse[configId], index)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--设置家具为使用状态
|
|
|
|
|
function XFurnitureManager.SetFurnitureState(furnitureId, dormitoryId)
|
|
|
|
|
local furniture = XFurnitureManager.GetFurnitureById(furnitureId)
|
|
|
|
|
if furniture then
|
|
|
|
|
furniture:SetUsedDormitoryId(dormitoryId)
|
|
|
|
|
|
|
|
|
|
if dormitoryId > 0 then
|
|
|
|
|
XFurnitureManager.RemoveFurnitureSingleUnUse(furniture.ConfigId, furniture.Id)
|
|
|
|
|
else
|
|
|
|
|
XFurnitureManager.AddFurnitureSingleUnUse(furniture.ConfigId, furniture.Id)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--查看家具是否在使用中
|
|
|
|
|
function XFurnitureManager.CheckFurnitureUsing(furnitureId, dormDataType)
|
|
|
|
|
local isUsing = false
|
|
|
|
|
if XDormConfig.IsTemplateRoom(dormDataType) then
|
|
|
|
|
return isUsing
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local furniture = XFurnitureManager.GetFurnitureById(furnitureId, dormDataType)
|
|
|
|
|
if furniture and furniture:CheckIsUsed() then
|
|
|
|
|
isUsing = true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return isUsing
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取未使用的家具列表
|
|
|
|
|
function XFurnitureManager.GetUnusedFurnitureList()
|
|
|
|
|
local list = {}
|
|
|
|
|
for _, furniture in pairs(FurnitureDatas) do
|
|
|
|
|
if furniture and furniture.DormitoryId > 0 then
|
|
|
|
|
table.insert(list, furniture)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return list
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取CategoryType的家具的个数
|
|
|
|
|
function XFurnitureManager.GetFurnitureCategoryCount(selectIds)
|
|
|
|
|
local count = 0
|
|
|
|
|
for _, selectId in ipairs(selectIds) do
|
|
|
|
|
if FurnitureCategoryTypes[selectId] then
|
|
|
|
|
count = count + #FurnitureCategoryTypes[selectId]
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return count
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取不在使用中的家具通过ConfigId
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XFurnitureManager.GetUnUseFurnitureById(configId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local list = FurnitureSingleUnUse[configId]
|
|
|
|
|
return list or {}
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XFurnitureManager.GetUnUseFurniture()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
return FurnitureSingleUnUse or {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local CheckSuit = function(selectSuitIds, furinitureId)
|
|
|
|
|
if not selectSuitIds or #selectSuitIds <= 0 then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, suitId in ipairs(selectSuitIds) do
|
|
|
|
|
if suitId == XFurnitureConfigs.FURNITURE_SUIT_CATEGORY_ALL_ID then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local tempCfg = XFurnitureManager.GetFurnitureConfigByUniqueId(furinitureId)
|
|
|
|
|
if tempCfg.SuitId == suitId then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取FurnitureTypeId的家具唯一Ids
|
|
|
|
|
function XFurnitureManager.GetFurnitureCategoryIds(selectIds, selectSuitIds, isRemoveUsed, orderType, isRemoveUnuse, isRemoveLock)
|
|
|
|
|
local ids = {}
|
|
|
|
|
for _, selectId in ipairs(selectIds) do
|
|
|
|
|
if FurnitureCategoryTypes[selectId] then
|
|
|
|
|
for _, id in ipairs(FurnitureCategoryTypes[selectId]) do
|
|
|
|
|
if isRemoveUsed and XFurnitureManager.CheckFurnitureUsing(id) then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if isRemoveUnuse and not XFurnitureManager.CheckFurnitureUsing(id) then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if isRemoveLock and XFurnitureManager.GetFurnitureIsLocked(id) then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not CheckSuit(selectSuitIds, id) then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
table.insert(ids, id)
|
|
|
|
|
:: continue ::
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
table.sort(ids, function(a, b)
|
|
|
|
|
-- 是否使用
|
|
|
|
|
local usingA = XFurnitureManager.CheckFurnitureUsing(a)
|
|
|
|
|
local usingB = XFurnitureManager.CheckFurnitureUsing(b)
|
|
|
|
|
if usingA ~= usingB then
|
|
|
|
|
return usingB
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 判断积分
|
|
|
|
|
local scoreA = XFurnitureManager.GetFurnitureScore(a)
|
|
|
|
|
local scoreB = XFurnitureManager.GetFurnitureScore(b)
|
|
|
|
|
if orderType == XFurnitureConfigs.FurnitureOrderType.LevelAsscend
|
|
|
|
|
or orderType == XFurnitureConfigs.FurnitureOrderType.LevelDescend then
|
|
|
|
|
local furnitureTypeA = XFurnitureManager.GetFurnitureConfigByUniqueId(a).TypeId
|
|
|
|
|
local levelA = XFurnitureConfigs.GetFurnitureTotalAttrLevel(furnitureTypeA, scoreA)
|
|
|
|
|
local furnitureTypeB = XFurnitureManager.GetFurnitureConfigByUniqueId(b).TypeId
|
|
|
|
|
local levelB = XFurnitureConfigs.GetFurnitureTotalAttrLevel(furnitureTypeB, scoreB)
|
|
|
|
|
if levelA ~= levelB then
|
|
|
|
|
if orderType == XFurnitureConfigs.FurnitureOrderType.LevelAsscend then
|
|
|
|
|
return levelA < levelB
|
|
|
|
|
else
|
|
|
|
|
return levelA > levelB
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if scoreA ~= scoreB then
|
|
|
|
|
if orderType == XFurnitureConfigs.FurnitureOrderType.ScoreAsscend then
|
|
|
|
|
return scoreA < scoreB
|
|
|
|
|
else
|
|
|
|
|
return scoreA > scoreB
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 判断类型
|
|
|
|
|
local configIdA = XFurnitureManager.GetFurnitureConfigId(a)
|
|
|
|
|
local minorA = XFurnitureConfigs.GetFurnitureTypeCfgByConfigId(configIdA).MinorType
|
|
|
|
|
|
|
|
|
|
local configIdB = XFurnitureManager.GetFurnitureConfigId(b)
|
|
|
|
|
local minorB = XFurnitureConfigs.GetFurnitureTypeCfgByConfigId(configIdB).MinorType
|
|
|
|
|
|
|
|
|
|
if minorA ~= minorB then
|
|
|
|
|
return minorA < minorB
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return a < b
|
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
return ids
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
--- 获取FurnitureTypeId的家具唯一Ids,不排序
|
|
|
|
|
---@param typeIds number[] 家具类型Id
|
|
|
|
|
---@param suitIds number[] 家具套装Id
|
|
|
|
|
---@param levelMap table<number,boolean> 过滤等级
|
|
|
|
|
---@param isRemoveUsed boolean 剔除使用中的
|
|
|
|
|
---@param isRemoveUnUse boolean 剔除未使用中的
|
|
|
|
|
---@param isRemoveLock boolean 剔除未解锁的
|
|
|
|
|
---@param onlyShowBase boolean 仅仅显示基础家具
|
|
|
|
|
---@return
|
|
|
|
|
--------------------------
|
|
|
|
|
function XFurnitureManager.GetFurnitureCategoryIdsNoSort(typeIds, suitIds, levelMap, isRemoveUsed, isRemoveUnUse, isRemoveLock, onlyShowBase, filterFurnitureIdMap)
|
|
|
|
|
local ids = {}
|
|
|
|
|
local checkLevel = not XTool.IsTableEmpty(levelMap)
|
|
|
|
|
local suitMap = {}
|
|
|
|
|
local checkSuit = not XTool.IsTableEmpty(suitIds)
|
|
|
|
|
if checkSuit then
|
|
|
|
|
for _, suitId in pairs(suitIds) do
|
|
|
|
|
suitMap[suitId] = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
local checkFilter = not XTool.IsTableEmpty(filterFurnitureIdMap)
|
|
|
|
|
for _, typeId in ipairs(typeIds) do
|
|
|
|
|
local furnitureIds = FurnitureCategoryTypes[typeId]
|
|
|
|
|
if not XTool.IsTableEmpty(furnitureIds) then
|
|
|
|
|
for _, id in ipairs(furnitureIds) do
|
|
|
|
|
local template = XFurnitureManager.GetFurnitureConfigByUniqueId(id)
|
|
|
|
|
--过滤家具(支持家具Id与配置Id)
|
|
|
|
|
if checkFilter and (filterFurnitureIdMap[id] or filterFurnitureIdMap[template.Id]) then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
--基础套件
|
|
|
|
|
if onlyShowBase and template.SuitId ~= XFurnitureConfigs.BASE_SUIT_ID then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--剔除使用中
|
|
|
|
|
if isRemoveUsed and XFurnitureManager.CheckFurnitureUsing(id) then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--剔除未使用中
|
|
|
|
|
if isRemoveUnUse and not XFurnitureManager.CheckFurnitureUsing(id) then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--剔除未解锁
|
|
|
|
|
if isRemoveLock and XFurnitureManager.GetFurnitureIsLocked(id) then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--剔除等级
|
|
|
|
|
if checkLevel then
|
|
|
|
|
local furnitureData = XFurnitureManager.GetFurnitureById(id)
|
|
|
|
|
if not levelMap[furnitureData:GetFurnitureTotalAttrLevel()] then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--剔除套装
|
|
|
|
|
if checkSuit and not (suitMap[XFurnitureConfigs.FURNITURE_SUIT_CATEGORY_ALL_ID] or suitMap[template.SuitId]) then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
table.insert(ids, id)
|
|
|
|
|
:: continue ::
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return ids
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
-- 获取已拥有的家具配置id列表
|
|
|
|
|
function XFurnitureManager.GetTotalFurnitureIds()
|
|
|
|
|
local configIds = {}
|
|
|
|
|
local furnitureIds = XFurnitureManager.GetFurnitureCategoryIds({ XFurnitureConfigs.FURNITURE_CATEGORY_ALL_ID },
|
|
|
|
|
{ XFurnitureConfigs.FURNITURE_SUIT_CATEGORY_ALL_ID }, false)
|
|
|
|
|
for _, id in pairs(furnitureIds) do
|
|
|
|
|
local furnitureData = XFurnitureManager.GetFurnitureConfigByUniqueId(id)
|
|
|
|
|
if furnitureData then
|
|
|
|
|
configIds[furnitureData.Id] = furnitureData.Id
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return configIds
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 判断是否已经有的该图鉴
|
|
|
|
|
function XFurnitureManager.IsFieldGuideHave(id)
|
|
|
|
|
if not id then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ids = XFurnitureManager.GetTotalFurnitureIds() or {}
|
|
|
|
|
return ids[id] ~= nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取家具得总积分
|
|
|
|
|
function XFurnitureManager.GetFurnitureScore(furnitureId,dormDataType)
|
|
|
|
|
local t = XFurnitureManager.GetFurnitureById(furnitureId,dormDataType)
|
|
|
|
|
if not t then
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return t:GetScore()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.GetFurnitureRedScore(furnitureId, dormDataType)
|
|
|
|
|
local t = XFurnitureManager.GetFurnitureById(furnitureId, dormDataType)
|
|
|
|
|
if t then
|
|
|
|
|
return t:GetRedScore()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.GetFurnitureYellowScore(furnitureId, dormDataType)
|
|
|
|
|
local t = XFurnitureManager.GetFurnitureById(furnitureId, dormDataType)
|
|
|
|
|
if t then
|
|
|
|
|
return t:GetYellowScore()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.GetFurnitureBlueScore(furnitureId, dormDataType)
|
|
|
|
|
local t = XFurnitureManager.GetFurnitureById(furnitureId, dormDataType)
|
|
|
|
|
if t then
|
|
|
|
|
return t:GetBlueScore()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
--===================
|
|
|
|
|
--获取家具是否上锁
|
|
|
|
|
--@param furnitureId:家具ID
|
|
|
|
|
--===================
|
|
|
|
|
function XFurnitureManager.GetFurnitureIsLocked(furnitureId)
|
|
|
|
|
local t = XFurnitureManager.GetFurnitureById(furnitureId)
|
|
|
|
|
if t then
|
|
|
|
|
return t:GetIsLocked()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
-- 获取家具特殊效果描述
|
|
|
|
|
function XFurnitureManager.GetFurnitureEffectDesc(furnitureId)
|
|
|
|
|
local t = XFurnitureManager.GetFurnitureById(furnitureId)
|
|
|
|
|
if t.Addition <= 0 then
|
|
|
|
|
return CS.XTextManager.GetText("DormFurnitureEffectDescNull")
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local addConfig = XFurnitureConfigs.GetAdditionAttrConfigById(t.Addition)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
return addConfig.Introduce
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 分别获取家具三条属性总分(attrA, attrB, attrC)
|
|
|
|
|
function XFurnitureManager.GetFurniturePartScore(furnitureIds,dormDataType)
|
|
|
|
|
local attrA = 0
|
|
|
|
|
local attrB = 0
|
|
|
|
|
local attrC = 0
|
|
|
|
|
|
|
|
|
|
if furnitureIds then
|
|
|
|
|
for _, id in ipairs(furnitureIds) do
|
|
|
|
|
local t = XFurnitureManager.GetFurnitureById(id,dormDataType)
|
|
|
|
|
if t then
|
|
|
|
|
attrA = attrA + t:GetRedScore()
|
|
|
|
|
attrB = attrB + t:GetYellowScore()
|
|
|
|
|
attrC = attrC + t:GetBlueScore()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return attrA, attrB, attrC
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 添加家具
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XFurnitureManager.AddFurniture(furnitureData, dormDataType, isInUse)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local datas
|
|
|
|
|
if not dormDataType then
|
|
|
|
|
dormDataType = XDormConfig.DormDataType.Self
|
|
|
|
|
end
|
|
|
|
|
if dormDataType == XDormConfig.DormDataType.Self then
|
|
|
|
|
datas = FurnitureDatas
|
|
|
|
|
else
|
|
|
|
|
datas = OtherFurnitureDatas
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if datas[furnitureData.Id] then
|
|
|
|
|
XLog.Error("FurnitureDatas is already exist furniture id is" .. furnitureData.Id)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if dormDataType == XDormConfig.DormDataType.Self then
|
|
|
|
|
XDataCenter.DormManager.FurnitureUnlockList[furnitureData.ConfigId] = furnitureData.ConfigId
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local furniture = XHomeFurnitureData.New(furnitureData)
|
|
|
|
|
datas[furnitureData.Id] = furniture
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
if not dormDataType or dormDataType == XDormConfig.DormDataType.Self then
|
|
|
|
|
FurnitureDatasCount = FurnitureDatasCount + 1
|
|
|
|
|
|
|
|
|
|
-- FurnitureCategoryTypes同时添加
|
|
|
|
|
local configId = furnitureData.ConfigId
|
|
|
|
|
local furnitureTypeId = XFurnitureConfigs.GetFurnitureTypeCfgByConfigId(configId).Id
|
|
|
|
|
if not FurnitureCategoryTypes[furnitureTypeId] then
|
|
|
|
|
FurnitureCategoryTypes[furnitureTypeId] = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not FurnitureCategoryTypes[XFurnitureConfigs.FURNITURE_CATEGORY_ALL_ID] then
|
|
|
|
|
FurnitureCategoryTypes[XFurnitureConfigs.FURNITURE_CATEGORY_ALL_ID] = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
table.insert(FurnitureCategoryTypes[furnitureTypeId], furnitureData.Id)
|
|
|
|
|
table.insert(FurnitureCategoryTypes[XFurnitureConfigs.FURNITURE_CATEGORY_ALL_ID], furnitureData.Id)
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if not isInUse then
|
|
|
|
|
-- 家具ConfigList同时添加
|
|
|
|
|
XFurnitureManager.AddFurnitureSingleUnUse(furnitureData.ConfigId, furnitureData.Id)
|
|
|
|
|
end
|
|
|
|
|
local roomId = furnitureData.DormitoryId
|
|
|
|
|
if roomId > 0 then
|
|
|
|
|
local roomData = XDataCenter.DormManager.GetRoomDataByRoomId(roomId)
|
|
|
|
|
if roomData then
|
|
|
|
|
roomData:AddFurniture(furnitureData.Id, furnitureData.ConfigId, furnitureData.X, furnitureData.Y, furnitureData.Angle)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 添加标记
|
|
|
|
|
XFurnitureManager.AddNewSuitFurnitureData(furnitureData.Id)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 移除家具(其他人的)
|
|
|
|
|
function XFurnitureManager.RemoveFurnitureOther()
|
|
|
|
|
OtherFurnitureDatas = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 移除家具
|
|
|
|
|
function XFurnitureManager.RemoveFurniture(furnitureId)
|
|
|
|
|
-- 先FurnitureCategoryTypes 同时移除
|
|
|
|
|
local configId = XFurnitureManager.GetFurnitureConfigId(furnitureId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
XFurnitureManager.RemoveMaxRecord(configId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local furnitureTypeId = XFurnitureConfigs.GetFurnitureTypeCfgByConfigId(configId).Id
|
|
|
|
|
XFurnitureManager.RemoveFurnitureSingleUnUse(configId, furnitureId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
XFurnitureManager.DelNewSuitFurnitureData(furnitureId)
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
if FurnitureCategoryTypes[furnitureTypeId] then
|
|
|
|
|
local index
|
|
|
|
|
for i, v in ipairs(FurnitureCategoryTypes[furnitureTypeId]) do
|
|
|
|
|
if furnitureId == v then
|
|
|
|
|
index = i
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if index then
|
|
|
|
|
table.remove(FurnitureCategoryTypes[furnitureTypeId], index)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if FurnitureCategoryTypes[XFurnitureConfigs.FURNITURE_CATEGORY_ALL_ID] then
|
|
|
|
|
local index
|
|
|
|
|
for i, v in ipairs(FurnitureCategoryTypes[XFurnitureConfigs.FURNITURE_CATEGORY_ALL_ID]) do
|
|
|
|
|
if furnitureId == v then
|
|
|
|
|
index = i
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if index then
|
|
|
|
|
table.remove(FurnitureCategoryTypes[XFurnitureConfigs.FURNITURE_CATEGORY_ALL_ID], index)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not FurnitureDatas[furnitureId] or FurnitureDatas[furnitureId] == nil then
|
|
|
|
|
XLog.Error("FurnitureDatas is not exist furniture id is" .. furnitureId)
|
|
|
|
|
return
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local furniture = FurnitureDatas[furnitureId]
|
|
|
|
|
local roomId = furniture:GetDormitoryId()
|
|
|
|
|
if roomId > 0 then
|
|
|
|
|
local roomData = XDataCenter.DormManager.GetRoomDataByRoomId(roomId)
|
|
|
|
|
if roomData then
|
|
|
|
|
roomData:RemoveFurniture(furnitureId, configId)
|
|
|
|
|
end
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
if FurnitureDatasCount and FurnitureDatasCount > 0 then
|
|
|
|
|
FurnitureDatasCount = FurnitureDatasCount - 1
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
FurnitureDatas[furnitureId] = nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 服务器推送增加家具
|
|
|
|
|
function XFurnitureManager.NotifyFurnitureOperate(data)
|
|
|
|
|
if data == nil or #data <= 0 then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, v in pairs(data) do
|
|
|
|
|
if v.OperateType == XFurnitureConfigs.FurnitureOperate.Add then
|
|
|
|
|
XFurnitureManager.AddFurniture(v.ClientFurniture)
|
|
|
|
|
elseif v.OperateType == XFurnitureConfigs.FurnitureOperate.Delete then
|
|
|
|
|
XFurnitureManager.RemoveFurniture(v.ClientFurniture.Id)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取家具等级奖励Id
|
|
|
|
|
function XFurnitureManager.GetLevelRewardId(furnitureId)
|
|
|
|
|
local allScore = XFurnitureManager.GetFurnitureScore(furnitureId)
|
|
|
|
|
local configId = XFurnitureManager.GetFurnitureConfigId(furnitureId)
|
|
|
|
|
local furnitureTypeId = XFurnitureConfigs.GetFurnitureTypeCfgByConfigId(configId).Id
|
|
|
|
|
local levelConfigs = XFurnitureConfigs.GetFurnitureLevelTemplate(furnitureTypeId)
|
|
|
|
|
local rewardId
|
|
|
|
|
|
|
|
|
|
for _, levelConfig in pairs(levelConfigs) do
|
|
|
|
|
if allScore >= levelConfig.MinScore and allScore < levelConfig.MaxScore then
|
|
|
|
|
rewardId = levelConfig.ReturnId
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return rewardId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取家具品质
|
|
|
|
|
function XFurnitureManager.GetLevelRewardQuality(furnitureId)
|
|
|
|
|
local allScore = XFurnitureManager.GetFurnitureScore(furnitureId)
|
|
|
|
|
local configId = XFurnitureManager.GetFurnitureConfigId(furnitureId)
|
|
|
|
|
local furnitureTypeId = XFurnitureConfigs.GetFurnitureTypeCfgByConfigId(configId).Id
|
|
|
|
|
local levelConfigs = XFurnitureConfigs.GetFurnitureLevelTemplate(furnitureTypeId)
|
|
|
|
|
local quality
|
|
|
|
|
for _, levelConfig in pairs(levelConfigs) do
|
|
|
|
|
if allScore >= levelConfig.MinScore and allScore < levelConfig.MaxScore then
|
|
|
|
|
quality = levelConfig.Quality
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not quality then
|
|
|
|
|
XLog.Error("XFurnitureManager.GetLevelRewardQuality Error allScore is " .. allScore)
|
|
|
|
|
return 1
|
|
|
|
|
end
|
|
|
|
|
return quality
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获得回收家具的奖励列表
|
|
|
|
|
function XFurnitureManager.GetRecycleRewards(furnitureIds)
|
|
|
|
|
local rewards = {}
|
|
|
|
|
local rewardIds = {}
|
|
|
|
|
local recycleRewards = {}
|
|
|
|
|
|
|
|
|
|
for _, furnitureId in ipairs(furnitureIds) do
|
|
|
|
|
local levelRewardId = XFurnitureManager.GetLevelRewardId(furnitureId)
|
|
|
|
|
|
|
|
|
|
local configId = XFurnitureManager.GetFurnitureConfigId(furnitureId)
|
|
|
|
|
local normalRewardId = XFurnitureConfigs.GetFurnitureReturnId(configId)
|
|
|
|
|
|
|
|
|
|
if levelRewardId then
|
|
|
|
|
table.insert(rewardIds, levelRewardId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if normalRewardId then
|
|
|
|
|
table.insert(rewardIds, normalRewardId)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, rewardId in ipairs(rewardIds) do
|
|
|
|
|
local rewardList = XRewardManager.GetRewardList(rewardId)
|
|
|
|
|
for _, item in pairs(rewardList) do
|
|
|
|
|
if rewards[item.TemplateId] then
|
|
|
|
|
rewards[item.TemplateId].Count = rewards[item.TemplateId].Count + item.Count
|
|
|
|
|
else
|
|
|
|
|
rewards[item.TemplateId] = XRewardManager.CreateRewardGoodsByTemplate(item)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
for _, reward in pairs(rewards) do
|
|
|
|
|
table.insert(recycleRewards, reward)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if #recycleRewards > 0 then
|
|
|
|
|
recycleRewards = XRewardManager.SortRewardGoodsList(recycleRewards)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return recycleRewards
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 分解家具
|
|
|
|
|
function XFurnitureManager.DecomposeFurniture(furnitureIds, cb)
|
|
|
|
|
XNetwork.Call(FurnitureRequest.DecomposeFurniture, { FurnitureIds = furnitureIds }, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if cb then
|
|
|
|
|
cb(res.RewardGoods, res.SuccessIds)
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.GetRewardFurnitureAttr(extraAttrId)
|
|
|
|
|
local extraAttr = XFurnitureConfigs.GetFurnitureExtraAttrsById(extraAttrId)
|
|
|
|
|
local total = XFurnitureConfigs.GetFurnitureBaseAttrValueById(extraAttr.BaseAttrId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
total = total + XFurnitureConfigs.GetFurnitureBaseAttrValueById(extraAttr.RemakeExtraAttrId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
local totalPercent = extraAttr.AttrIds[XFurnitureConfigs.AttrType.AttrA]
|
|
|
|
|
+ extraAttr.AttrIds[XFurnitureConfigs.AttrType.AttrB]
|
|
|
|
|
+ extraAttr.AttrIds[XFurnitureConfigs.AttrType.AttrC]
|
|
|
|
|
|
|
|
|
|
local attrA = math.floor(extraAttr.AttrIds[XFurnitureConfigs.AttrType.AttrA] / totalPercent * total or 0)
|
|
|
|
|
local attrB = math.floor(extraAttr.AttrIds[XFurnitureConfigs.AttrType.AttrB] / totalPercent * total or 0)
|
|
|
|
|
local attrC = total - attrA - attrB
|
|
|
|
|
|
|
|
|
|
return attrA, attrB, attrC
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- 获取奖励家具特殊属性id
|
|
|
|
|
function XFurnitureManager.GetRewardFurnitureEffectId(furntiureRewardId)
|
|
|
|
|
local template = XFurnitureConfigs.GetFurnitureReward(furntiureRewardId)
|
|
|
|
|
if not template then
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return template.AdditionId
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取奖励家具品质
|
|
|
|
|
function XFurnitureManager.GetRewardFurnitureQuality(id)
|
|
|
|
|
local template = XFurnitureConfigs.GetFurnitureReward(id)
|
|
|
|
|
if not template then
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local attrScore = XFurnitureConfigs.GetFurnitureExtraAttrTotalValue(template.ExtraAttrId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local additionScore = XFurnitureConfigs.GetAdditionalAddScore(template.AdditionId)
|
|
|
|
|
|
|
|
|
|
local allScore = attrScore + additionScore
|
|
|
|
|
local furnitureTypeId = XFurnitureConfigs.GetFurnitureTypeCfgByConfigId(template.FurnitureId).Id
|
|
|
|
|
local levelConfigs = XFurnitureConfigs.GetFurnitureLevelTemplate(furnitureTypeId)
|
|
|
|
|
|
|
|
|
|
for _, levelConfig in ipairs(levelConfigs) do
|
|
|
|
|
if allScore >= levelConfig.MinScore and allScore < levelConfig.MaxScore then
|
|
|
|
|
return levelConfig.Quality
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取Extra家具总分
|
|
|
|
|
function XFurnitureManager.GetRewardFurnitureScore(id)
|
|
|
|
|
local template = XFurnitureConfigs.GetFurnitureReward(id)
|
|
|
|
|
if not template then
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local attrScore = XFurnitureConfigs.GetFurnitureExtraAttrTotalValue(template.ExtraAttrId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local additionScore = XFurnitureConfigs.GetAdditionalAddScore(template.AdditionId)
|
|
|
|
|
|
|
|
|
|
return attrScore + additionScore
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XFurnitureManager.SetCollectNoneFurniture(roomId, furnitureList)
|
|
|
|
|
CollectNoneRoomFurnitureList[roomId] = furnitureList
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XFurnitureManager.GetCollectNoneFurniture(roomId)
|
|
|
|
|
return CollectNoneRoomFurnitureList[roomId]
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XFurnitureManager.CheckCollectNoneFurniture(roomId)
|
|
|
|
|
return CollectNoneRoomFurnitureList[roomId] ~= nil
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.IsFurnitureMatchType(id, targetType)
|
|
|
|
|
local furnitureDatas = XFurnitureManager.GetFurnitureById(id)
|
|
|
|
|
local furnitureTemplates = XFurnitureConfigs.GetFurnitureTemplateById(furnitureDatas.ConfigId)
|
|
|
|
|
if furnitureTemplates then
|
|
|
|
|
return furnitureTemplates.TypeId == targetType
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.UpdateFurnitureCreateList(pos, endTime, furniture, count)
|
|
|
|
|
for _, v in pairs(FurnitureCreateDatas) do
|
|
|
|
|
if v.Pos == pos then
|
|
|
|
|
v.EndTime = endTime
|
|
|
|
|
v.Furniture = furniture
|
|
|
|
|
v.Count = count
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
table.insert(FurnitureCreateDatas, {
|
|
|
|
|
Pos = pos,
|
|
|
|
|
EndTime = endTime,
|
|
|
|
|
Furniture = furniture,
|
|
|
|
|
Count = count,
|
|
|
|
|
})
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.GetFurnitureCreateItemByPos(pos)
|
|
|
|
|
if not FurnitureCreateDatas then
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, v in pairs(FurnitureCreateDatas) do
|
|
|
|
|
if v.Pos == pos then
|
|
|
|
|
return v
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.RemoveFurnitureCreateListByPos(pos)
|
|
|
|
|
local key = nil
|
|
|
|
|
for k, v in pairs(FurnitureCreateDatas) do
|
|
|
|
|
if v.Pos == pos then
|
|
|
|
|
key = k
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if key then
|
|
|
|
|
FurnitureCreateDatas[key] = nil
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.HasCollectableFurniture()
|
|
|
|
|
if not FurnitureCreateDatas then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
local now = XTime.GetServerNowTimestamp()
|
|
|
|
|
local canCollect = false
|
|
|
|
|
for _, v in pairs(FurnitureCreateDatas) do
|
|
|
|
|
if v.EndTime <= now then
|
|
|
|
|
canCollect = true
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return canCollect
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.GetFurnitureCreateList()
|
|
|
|
|
return FurnitureCreateDatas
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--判断坑位已满
|
|
|
|
|
function XFurnitureManager.IsFurnitureCreatePosFull()
|
|
|
|
|
local maxCreateNum = CS.XGame.Config:GetInt("DormFurnitureCreateNum")
|
|
|
|
|
if not FurnitureCreateDatas then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local buildingNum = 0
|
|
|
|
|
for _, _ in pairs(FurnitureCreateDatas) do
|
|
|
|
|
buildingNum = buildingNum + 1
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if buildingNum == maxCreateNum then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
--版本更新后,不再使用制作队列,兼容队列里还未领取的家具
|
|
|
|
|
function XFurnitureManager.RequestCreateList(cb)
|
|
|
|
|
if XTool.IsTableEmpty(FurnitureCreateDatas) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local timeOfNow = XTime.GetServerNowTimestamp()
|
|
|
|
|
for _, data in pairs(FurnitureCreateDatas) do
|
|
|
|
|
if timeOfNow >= data.EndTime then
|
|
|
|
|
XFurnitureManager.CheckCreateFurniture(data.Pos, function(furnitureList, createCount)
|
|
|
|
|
local furnitureCount = #furnitureList
|
|
|
|
|
if furnitureCount == 1 then
|
|
|
|
|
XLuaUiManager.OpenSingleUi("UiFurnitureDetail", furnitureList[1].Id, furnitureList[1].ConfigId)
|
|
|
|
|
else
|
|
|
|
|
XLuaUiManager.OpenSingleUi("UiFurnitureObtain", XFurnitureConfigs.GainType.Remake, furnitureList)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if cb then cb() end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- 获取所有MinorType类型的家具数量,需要过滤风格参数
|
|
|
|
|
function XFurnitureManager.GetFurnitureCountByMinorTypeAndSuitId(roomId, furnitureCache, suitId, minorType)
|
|
|
|
|
local totalDatas = furnitureCache or {}
|
|
|
|
|
local totalCount = 0
|
|
|
|
|
|
|
|
|
|
for _, v in pairs(totalDatas) do
|
|
|
|
|
local furnitureTemplate = XFurnitureConfigs.GetFurnitureTemplateById(v.ConfigId)
|
|
|
|
|
local currentTypeDatas = XFurnitureConfigs.GetFurnitureTypeById(furnitureTemplate.TypeId)
|
|
|
|
|
local currentBaseDatas = XFurnitureConfigs.GetFurnitureBaseTemplatesById(v.ConfigId)
|
|
|
|
|
local currentFurniture = XFurnitureManager.GetFurnitureById(v.Id)
|
|
|
|
|
local isUsing = currentFurniture:CheckIsUsed() and currentFurniture.DormitoryId ~= roomId--不计算其他宿舍的
|
|
|
|
|
|
|
|
|
|
if XFurnitureConfigs.IsAllSuit(suitId) then
|
|
|
|
|
--全部
|
|
|
|
|
if (not isUsing) and currentTypeDatas.MinorType == minorType then
|
|
|
|
|
totalCount = totalCount + 1
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
if (not isUsing) and currentTypeDatas.MinorType == minorType and currentBaseDatas.SuitId == suitId then
|
|
|
|
|
totalCount = totalCount + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return totalCount
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.GetFurnitureCountByMinorAndCategoryAndSuitId(roomId, furnitureCache, suitId, minor, category)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local furnitureList = furnitureCache or {}
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local totalCount = 0
|
|
|
|
|
category = category or 0
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
for _, list in pairs(furnitureList) do
|
|
|
|
|
for _, v in pairs(list) do
|
|
|
|
|
local furnitureTemplate = XFurnitureConfigs.GetFurnitureTemplateById(v.ConfigId)
|
|
|
|
|
local currentTypeData = XFurnitureConfigs.GetFurnitureTypeById(furnitureTemplate.TypeId)
|
|
|
|
|
local currentBaseData = XFurnitureConfigs.GetFurnitureBaseTemplatesById(v.ConfigId)
|
|
|
|
|
local currentFurniture = XFurnitureManager.GetFurnitureById(v.Id)
|
|
|
|
|
local isUsing = currentFurniture:CheckIsUsed() and currentFurniture.DormitoryId ~= roomId--不计算其他宿舍的
|
|
|
|
|
|
|
|
|
|
if not isUsing then
|
|
|
|
|
if XFurnitureConfigs.IsAllSuit(suitId) then
|
|
|
|
|
if currentTypeData.MinorType == minor and currentTypeData.Category == category then
|
|
|
|
|
totalCount = totalCount + 1
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
if suitId == currentBaseData.SuitId and currentTypeData.MinorType == minor and currentTypeData.Category == category then
|
|
|
|
|
totalCount = totalCount + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
return totalCount
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- 获取过滤的家具数据并合并ConfigId一致的家具
|
|
|
|
|
---@param suitId number 套装Id
|
|
|
|
|
---@param minorType number 家具次要类型
|
|
|
|
|
---@param categoryType number 家具类别类型
|
|
|
|
|
---@return XHomeFurnitureData[][]
|
|
|
|
|
--------------------------
|
|
|
|
|
function XFurnitureManager.FilterAndMergeDisplayFurnitureList(suitId, minorType, categoryType, needSort)
|
|
|
|
|
local totalData = XDataCenter.FurnitureManager.GetFurnitureDatas()
|
|
|
|
|
local map = {}
|
|
|
|
|
--是否检查套装
|
|
|
|
|
local checkSuit = suitId and not XFurnitureConfigs.IsAllSuit(suitId)
|
|
|
|
|
|
|
|
|
|
for _, data in pairs(totalData) do
|
|
|
|
|
local configId = data:GetConfigId()
|
|
|
|
|
local furnitureTemplate = XFurnitureConfigs.GetFurnitureTemplateById(configId)
|
|
|
|
|
local baseData = XFurnitureConfigs.GetFurnitureBaseTemplatesById(configId)
|
|
|
|
|
local currentTypeData = XFurnitureConfigs.GetFurnitureTypeById(furnitureTemplate.TypeId)
|
|
|
|
|
local isUsing = XFurnitureManager.CheckFurnitureUsing(data:GetInstanceID())
|
|
|
|
|
|
|
|
|
|
--未使用 && (不检查套装 || 套装Id == 参数)
|
|
|
|
|
if not isUsing and (not checkSuit or baseData.SuitId == suitId) then
|
|
|
|
|
local list = map[configId] or {}
|
|
|
|
|
if categoryType ~= nil and categoryType ~= 0 then
|
|
|
|
|
--不为空
|
|
|
|
|
if currentTypeData.MinorType == minorType and currentTypeData.Category == categoryType then
|
|
|
|
|
table.insert(list, data)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
else
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if currentTypeData.MinorType == minorType then
|
|
|
|
|
table.insert(list, data)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
map[configId] = list
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
local list = {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local sort = function(a, b)
|
|
|
|
|
local scoreA = a:GetScore()
|
|
|
|
|
local scoreB = b:GetScore()
|
|
|
|
|
if scoreA ~= scoreB then
|
|
|
|
|
return scoreA > scoreB
|
|
|
|
|
end
|
|
|
|
|
return a:GetInstanceID() < b:GetInstanceID()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for _, temp in pairs(map) do
|
|
|
|
|
if not XTool.IsTableEmpty(temp) then
|
|
|
|
|
if needSort then
|
|
|
|
|
table.sort(temp, sort)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
table.insert(list, temp)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if needSort then
|
|
|
|
|
table.sort(list, function(a, b)
|
|
|
|
|
return sort(a[1], b[1])
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return list
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--- 获取过滤的家具数据
|
|
|
|
|
---@param suitId number 套装Id
|
|
|
|
|
---@param minorType number 家具次要类型
|
|
|
|
|
---@param categoryType number 家具类别类型
|
|
|
|
|
---@return XHomeFurnitureData[]
|
|
|
|
|
--------------------------
|
|
|
|
|
function XFurnitureManager.FilterDisplayFurnitureList(suitId, minorType, categoryType)
|
|
|
|
|
local totalData = XDataCenter.FurnitureManager.GetFurnitureDatas()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local list = {}
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--是否检查套装
|
|
|
|
|
local checkSuit = suitId and not XFurnitureConfigs.IsAllSuit(suitId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
-- 过滤
|
2024-09-01 20:49:41 +00:00
|
|
|
|
for _, v in pairs(totalData) do
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local furnitureTemplate = XFurnitureConfigs.GetFurnitureTemplateById(v.ConfigId)
|
|
|
|
|
local baseData = XFurnitureConfigs.GetFurnitureBaseTemplatesById(v.ConfigId)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local currentTypeData = XFurnitureConfigs.GetFurnitureTypeById(furnitureTemplate.TypeId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local isUsing = XFurnitureManager.CheckFurnitureUsing(v.Id)
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
--未使用 && (不检查套装 || 套装Id == 参数)
|
|
|
|
|
if not isUsing and (not checkSuit or baseData.SuitId == suitId) then
|
|
|
|
|
if categoryType ~= nil and categoryType ~= 0 then
|
|
|
|
|
--不为空
|
|
|
|
|
if currentTypeData.MinorType == minorType and currentTypeData.Category == categoryType then
|
|
|
|
|
table.insert(list, v)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
else
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if currentTypeData.MinorType == minorType then
|
|
|
|
|
table.insert(list, v)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return list
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 获取家具套装数量
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XFurnitureManager.GetFurnitureCountBySuitId(cache, suitId)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local allTypeTemplate = XFurnitureConfigs.GetAllFurnitureTypes()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local totalCount = 0
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if XFurnitureConfigs.IsAllSuit(suitId) then --全部套装数量
|
|
|
|
|
for _, data in pairs(allTypeTemplate) do
|
|
|
|
|
local cacheKey = XFurnitureManager.GenerateCacheKey(data.MinorType, data.Category)
|
|
|
|
|
local list = cache and cache[cacheKey] or {}
|
|
|
|
|
for _, tempList in pairs(list) do
|
|
|
|
|
totalCount = totalCount + #tempList
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
else -- 单个套装数量
|
|
|
|
|
for _, data in pairs(allTypeTemplate) do
|
|
|
|
|
local cacheKey = XFurnitureManager.GenerateCacheKey(data.MinorType, data.Category)
|
|
|
|
|
local list = cache and cache[cacheKey] or {}
|
|
|
|
|
for _, tempList in pairs(list) do
|
|
|
|
|
for _, furniture in pairs(tempList) do
|
|
|
|
|
local baseData = XFurnitureConfigs.GetFurnitureBaseTemplatesById(furniture.ConfigId)
|
|
|
|
|
if baseData.SuitId == suitId then
|
|
|
|
|
totalCount = totalCount + 1
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return totalCount
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.GenerateCacheKey(baseType, subType)
|
|
|
|
|
if not baseType then
|
|
|
|
|
return
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
subType = subType or 0
|
|
|
|
|
return baseType * 10000 + subType * 100 + 1
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 摆放家具
|
|
|
|
|
function XFurnitureManager.PutFurniture(dormitoryId, furnitureList, isBehavior, func)
|
|
|
|
|
XNetwork.Call(FurnitureRequest.PutFurniture, {
|
|
|
|
|
DormitoryId = dormitoryId,
|
|
|
|
|
FurnitureList = furnitureList
|
|
|
|
|
}, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
if isBehavior and func then
|
|
|
|
|
func(false)
|
|
|
|
|
end
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
--摆放成功后删除红点
|
|
|
|
|
for _, furniture in pairs(furnitureList) do
|
|
|
|
|
XFurnitureManager.RemoveMaxRecord(XFurnitureManager.GetFurnitureConfigId(furniture.Id))
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
if func then
|
|
|
|
|
func(true)
|
|
|
|
|
end
|
|
|
|
|
end)
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
local function FurnitureRemouldSuccessCb(furnitureList, func, refitCb, isCloseRecycle, isCloseRemake)
|
|
|
|
|
if func then func(furnitureList) end
|
|
|
|
|
|
|
|
|
|
if #furnitureList == 1 then
|
|
|
|
|
XLuaUiManager.OpenSingleUi("UiFurnitureDetail", furnitureList[1].Id, furnitureList[1].ConfigId, nil, nil, isCloseRecycle, nil, isCloseRemake)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XLuaUiManager.OpenSingleUi("UiFurnitureObtain", XFurnitureConfigs.GainType.Remake, furnitureList, refitCb, 0, isCloseRecycle, isCloseRemake)
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
|
|
|
|
-- 改造家具
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XFurnitureManager.RemouldFurniture(remouldMap, func, refitCb, isCloseRecycle, isCloseRemake)
|
|
|
|
|
if XTool.IsTableEmpty(remouldMap) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local params = {}
|
|
|
|
|
for itemId, ids in pairs(remouldMap) do
|
|
|
|
|
local param = {
|
|
|
|
|
ItemId = itemId,
|
|
|
|
|
FurnitureIds = ids
|
|
|
|
|
}
|
|
|
|
|
table.insert(params, param)
|
|
|
|
|
end
|
|
|
|
|
XNetwork.Call(FurnitureRequest.RemouldFurniture, { Params = params }, function(res)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 清除消耗的家具
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local removeIds = {}
|
|
|
|
|
for _, param in ipairs(params) do
|
|
|
|
|
for _, furnitureId in ipairs(param.FurnitureIds) do
|
|
|
|
|
XFurnitureManager.RemoveFurniture(furnitureId)
|
|
|
|
|
table.insert(removeIds, furnitureId)
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 添加新增的家具
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local furnitureList = res.FurnitureList
|
|
|
|
|
for _, furniture in ipairs(furnitureList) do
|
2023-07-14 19:35:33 +00:00
|
|
|
|
XFurnitureManager.AddFurniture(furniture)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
table.insert(removeIds, furniture.Id)
|
|
|
|
|
XFurnitureManager.AddMaxRecord(furniture.Id)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
XFurnitureManager.DeleteNewHint(removeIds)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if not XTool.IsTableEmpty(furnitureList) then
|
|
|
|
|
FurnitureRemouldSuccessCb(furnitureList, func, refitCb, isCloseRecycle, isCloseRemake)
|
|
|
|
|
else
|
|
|
|
|
if func then
|
|
|
|
|
func(furnitureList)
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_FURNITURE_ON_MODIFY)
|
|
|
|
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_FURNITURE_ON_MODIFY)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 领取家具,
|
|
|
|
|
function XFurnitureManager.CheckCreateFurniture(pos, func)
|
|
|
|
|
XNetwork.Call(FurnitureRequest.CheckCreateFurniture, { Pos = pos }, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 清除FurnitureManager的创建家具列表数据
|
|
|
|
|
XFurnitureManager.RemoveFurnitureCreateListByPos(pos)
|
|
|
|
|
-- 将家具添加到List列表
|
|
|
|
|
for _, furniture in ipairs(res.FurnitureList) do
|
|
|
|
|
XFurnitureManager.AddFurniture(furniture)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if func then
|
|
|
|
|
func(res.FurnitureList, res.Count)
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_FURNITURE_GET_FURNITURE)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
local function FurnitureCreateSuccessCb(furnitureList, createCount, cb)
|
|
|
|
|
if cb then cb(furnitureList, createCount) end
|
|
|
|
|
|
|
|
|
|
local furnitureCount = #furnitureList
|
|
|
|
|
if furnitureCount == 1 then
|
|
|
|
|
XLuaUiManager.OpenSingleUi("UiFurnitureDetail", furnitureList[1].Id, furnitureList[1].ConfigId)
|
|
|
|
|
else
|
|
|
|
|
XLuaUiManager.OpenSingleUi("UiFurnitureObtain", XFurnitureConfigs.GainType.Remake, furnitureList, nil, createCount / furnitureCount)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.OnResponseCreateFurniture(furnitureList, count, func)
|
|
|
|
|
local ids = {}
|
|
|
|
|
furnitureList = furnitureList or {}
|
|
|
|
|
for _, furniture in ipairs(furnitureList) do
|
|
|
|
|
XFurnitureManager.AddFurniture(furniture)
|
|
|
|
|
table.insert(ids, furniture.Id)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not XTool.IsTableEmpty(furnitureList) then
|
|
|
|
|
XUiManager.TipMsg(XUiHelper.GetText("FurnitureCreateSuccess"), XUiManager.UiTipType.Tip, function()
|
|
|
|
|
FurnitureCreateSuccessCb(furnitureList, count, func)
|
|
|
|
|
end)
|
|
|
|
|
else
|
|
|
|
|
if func then
|
|
|
|
|
-- 刷新界面
|
|
|
|
|
func(furnitureList, count)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_FURNITURE_GET_FURNITURE)
|
|
|
|
|
end
|
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
-- 建造家具
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XFurnitureManager.CreateFurniture(typeIds, count, costA, costB, costC, func)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
XNetwork.Call(FurnitureRequest.CreateFurniture, {
|
|
|
|
|
TypeIds = typeIds,
|
|
|
|
|
Count = count,
|
|
|
|
|
CostA = costA,
|
|
|
|
|
CostB = costB,
|
|
|
|
|
CostC = costC
|
|
|
|
|
}, function(res)
|
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
XFurnitureManager.OnResponseCreateFurniture(res.FurnitureList, res.Count, func)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end)
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
local function FurnitureRemakeSuccessCb(furnitureList, remakeCount, cb)
|
|
|
|
|
if cb then cb(furnitureList, remakeCount) end
|
|
|
|
|
|
|
|
|
|
local furnitureCount = #furnitureList
|
|
|
|
|
if furnitureCount == 1 then
|
|
|
|
|
XLuaUiManager.OpenSingleUi("UiFurnitureDetail", furnitureList[1].Id, furnitureList[1].ConfigId)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
XLuaUiManager.OpenSingleUi("UiFurnitureObtain", XFurnitureConfigs.GainType.Remake, furnitureList)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function RequestRemakeFurniture(furnitureIds, costA, costB, costC, roomId, cb)
|
|
|
|
|
if XTool.IsTableEmpty(furnitureIds) then
|
|
|
|
|
XUiManager.TipText("FurnitureRemakeNone")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
if #furnitureIds > XFurnitureConfigs.MaxRemakeCount then
|
|
|
|
|
XUiManager.TipText("DormBuildMaxCount", nil, nil, XFurnitureConfigs.MaxRemakeCount)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local req = {
|
|
|
|
|
FurnitureIds = furnitureIds,
|
|
|
|
|
CostA = costA,
|
|
|
|
|
CostB = costB,
|
|
|
|
|
CostC = costC,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
XNetwork.Call(FurnitureRequest.FurnitureRemake, req, function(res)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
if res.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(res.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 将分解成功的家具从缓存中移除
|
2024-09-01 20:49:41 +00:00
|
|
|
|
for _, id in ipairs(furnitureIds) do
|
|
|
|
|
XFurnitureManager.RemoveFurniture(id)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 删除红点
|
2024-09-01 20:49:41 +00:00
|
|
|
|
XDataCenter.FurnitureManager.DeleteNewHint(furnitureIds)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
XRewardManager.MergeAndSortRewardGoodsList(res.RewardGoods)
|
2024-09-01 20:49:41 +00:00
|
|
|
|
-- 将家具添加到List列表
|
|
|
|
|
local ids = {}
|
|
|
|
|
local isInUse = XTool.IsNumberValid(roomId)
|
|
|
|
|
local furnitureList = res.FurnitureList or {}
|
|
|
|
|
for _, furniture in ipairs(furnitureList) do
|
|
|
|
|
XFurnitureManager.AddFurniture(furniture, nil, isInUse)
|
|
|
|
|
table.insert(ids, furniture.Id)
|
|
|
|
|
XFurnitureManager.AddMaxRecord(furniture.Id)
|
|
|
|
|
end
|
|
|
|
|
if isInUse then
|
|
|
|
|
XHomeDormManager.UpdateFurnitureData(roomId, furnitureIds, furnitureList)
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
if not XTool.IsTableEmpty(furnitureList) then
|
|
|
|
|
XUiManager.TipMsg(XUiHelper.GetText("FurnitureRemakeSuccess"), nil, function()
|
|
|
|
|
FurnitureRemakeSuccessCb(furnitureList, res.Count, cb)
|
|
|
|
|
end)
|
|
|
|
|
else
|
|
|
|
|
if cb then cb(furnitureList, res.Count) end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
XEventManager.DispatchEvent(XEventId.EVENT_FURNITURE_ON_MODIFY)
|
|
|
|
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_FURNITURE_ON_MODIFY)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end)
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
function XFurnitureManager.FilterBeforeRemake(furnitureIds, cost)
|
|
|
|
|
furnitureIds = furnitureIds or {}
|
|
|
|
|
local pass, unPass = {}, {}
|
|
|
|
|
for _, furnitureId in pairs(furnitureIds) do
|
|
|
|
|
local furniture = XDataCenter.FurnitureManager.GetFurnitureById(furnitureId)
|
|
|
|
|
if not furniture then
|
|
|
|
|
goto continue
|
|
|
|
|
end
|
|
|
|
|
local costA, costB, costC = furniture:GetBaseAttr()
|
|
|
|
|
local total = costA + costB + costC
|
|
|
|
|
if cost >= total and XFurnitureConfigs.CheckFurnitureRemake(furniture, cost) then
|
|
|
|
|
table.insert(pass, furnitureId)
|
|
|
|
|
else
|
|
|
|
|
table.insert(unPass, furnitureId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
::continue::
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return pass, unPass
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 重新建造家具
|
|
|
|
|
function XFurnitureManager.FurnitureRemake(furnitureIds, costA, costB, costC, roomId, cb)
|
|
|
|
|
|
|
|
|
|
local rejectIds
|
|
|
|
|
furnitureIds, rejectIds = XFurnitureManager.FilterBeforeRemake(furnitureIds, costA + costB + costC)
|
|
|
|
|
|
|
|
|
|
if XTool.IsTableEmpty(rejectIds) then
|
|
|
|
|
RequestRemakeFurniture(furnitureIds, costA, costB, costC, roomId, cb)
|
|
|
|
|
else
|
|
|
|
|
XLuaUiManager.Open("UiFurnitureReCreateDetail", XUiHelper.GetText("FurnitureDontRemakeTip"), rejectIds, function()
|
|
|
|
|
RequestRemakeFurniture(furnitureIds, costA, costB, costC, roomId, cb)
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
--=====================
|
|
|
|
|
--解锁/上锁家具
|
|
|
|
|
--@param furnitureId:家具ID
|
|
|
|
|
--@param isLocked:是否上锁
|
|
|
|
|
--@param callBack:成功回调
|
|
|
|
|
--=====================
|
|
|
|
|
function XFurnitureManager.SetFurnitureLock(furnitureId, isLocked, callBack)
|
|
|
|
|
XNetwork.Call(FurnitureRequest.SetFurnitureLock, {
|
|
|
|
|
FurnitureId = furnitureId,
|
|
|
|
|
IsLocked = isLocked
|
|
|
|
|
}, function(reply)
|
|
|
|
|
-- reply = {
|
|
|
|
|
-- XCode Code,
|
|
|
|
|
-- int FurnitureId,
|
|
|
|
|
-- bool IsLocked}
|
|
|
|
|
if reply.Code ~= XCode.Success then
|
|
|
|
|
XUiManager.TipCode(reply.Code)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local furnitureData = XFurnitureManager.GetFurnitureById(reply.FurnitureId)
|
|
|
|
|
if furnitureData then
|
|
|
|
|
furnitureData:SetIsLocked(isLocked)
|
|
|
|
|
end
|
|
|
|
|
if callBack then callBack() end
|
|
|
|
|
end)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 根据家具属性获得贴图
|
|
|
|
|
function XFurnitureManager.GetFurnitureMaterial(furnitureId, dormDataType)
|
|
|
|
|
if not furnitureId then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local furnitureData = XFurnitureManager.GetFurnitureById(furnitureId, dormDataType)
|
|
|
|
|
if not furnitureData then
|
|
|
|
|
return
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local furnitureColour = XFurnitureConfigs.GetFurnitureColour(furnitureData.ConfigId)
|
|
|
|
|
if not furnitureColour then
|
|
|
|
|
return
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
if XDormConfig.IsTemplateRoom(dormDataType) then
|
|
|
|
|
return furnitureColour.DefaultMaterial
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
2023-07-14 19:35:33 +00:00
|
|
|
|
local maxAttrKey = 0
|
|
|
|
|
local maxAttrVal = 0
|
|
|
|
|
-- local midAttrKey = 0
|
|
|
|
|
local midAttrVal = 0
|
|
|
|
|
|
|
|
|
|
for k, v in pairs(furnitureData.AttrList) do
|
|
|
|
|
if v >= maxAttrVal then
|
|
|
|
|
-- midAttrKey = maxAttrKey
|
|
|
|
|
midAttrVal = maxAttrVal
|
|
|
|
|
|
|
|
|
|
maxAttrKey = k
|
|
|
|
|
maxAttrVal = v
|
|
|
|
|
elseif v >= midAttrVal then
|
|
|
|
|
-- midAttrKey = k
|
|
|
|
|
midAttrVal = v
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 最高和第二高值一致,则返回默认
|
|
|
|
|
if maxAttrVal == midAttrVal then
|
|
|
|
|
return furnitureColour.DefaultMaterial
|
|
|
|
|
end
|
|
|
|
|
if midAttrVal == 0 then
|
|
|
|
|
return furnitureColour.FurnitureMaterials[maxAttrKey]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local attrOverRate = (maxAttrVal - midAttrVal) / midAttrVal * 100
|
|
|
|
|
if furnitureColour and attrOverRate >= furnitureColour.AttrIds[maxAttrKey] then
|
|
|
|
|
return furnitureColour.FurnitureMaterials[maxAttrKey]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return furnitureColour.DefaultMaterial
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 根据家具属性获得家具特效
|
|
|
|
|
function XFurnitureManager.GetFurnitureFx(furnitureId, dormDataType)
|
|
|
|
|
if not furnitureId then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local furnitureData = XFurnitureManager.GetFurnitureById(furnitureId, dormDataType)
|
|
|
|
|
if not furnitureData then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local furnitureColour = XFurnitureConfigs.GetFurnitureColour(furnitureData.ConfigId)
|
|
|
|
|
if not furnitureColour then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if XDormConfig.IsTemplateRoom(dormDataType) then
|
2024-09-01 20:49:41 +00:00
|
|
|
|
return furnitureColour.DefaultFurnitureFx
|
2023-07-14 19:35:33 +00:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local maxAttrKey = 0
|
|
|
|
|
local maxAttrVal = 0
|
|
|
|
|
-- local midAttrKey = 0
|
|
|
|
|
local midAttrVal = 0
|
|
|
|
|
|
|
|
|
|
for k, v in pairs(furnitureData.AttrList) do
|
|
|
|
|
if v >= maxAttrVal then
|
|
|
|
|
-- midAttrKey = maxAttrKey
|
|
|
|
|
midAttrVal = maxAttrVal
|
|
|
|
|
|
|
|
|
|
maxAttrKey = k
|
|
|
|
|
maxAttrVal = v
|
|
|
|
|
elseif v >= midAttrVal then
|
|
|
|
|
-- midAttrKey = k
|
|
|
|
|
midAttrVal = v
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 最高和第二高值一致,则返回默认
|
|
|
|
|
if maxAttrVal == midAttrVal then
|
|
|
|
|
return furnitureColour.DefaultFurnitureFx
|
|
|
|
|
end
|
|
|
|
|
if midAttrVal == 0 then
|
|
|
|
|
return furnitureColour.FurnitureFx[maxAttrKey]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local attrOverRate = (maxAttrVal - midAttrVal) / midAttrVal * 100
|
|
|
|
|
if furnitureColour and attrOverRate >= furnitureColour.AttrIds[maxAttrKey] then
|
|
|
|
|
return furnitureColour.FurnitureFx[maxAttrKey]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return furnitureColour.DefaultFurnitureFx
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 读取家具表的Icon,不能获得家具的属性用这个接口
|
|
|
|
|
function XFurnitureManager.GetFurnitureIconByConfigId(configId)
|
|
|
|
|
local furnitureTemplates = XFurnitureConfigs.GetFurnitureBaseTemplatesById(configId)
|
|
|
|
|
if not furnitureTemplates then
|
|
|
|
|
return ""
|
|
|
|
|
end
|
|
|
|
|
return furnitureTemplates.Icon
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- 根据家具属性计算家具的Icon,能获得家具的属性用这个接口
|
|
|
|
|
function XFurnitureManager.GetFurnitureIconById(furnitureId, dormDataType)
|
|
|
|
|
if not furnitureId then
|
|
|
|
|
return ""
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local furnitureData = XFurnitureManager.GetFurnitureById(furnitureId, dormDataType)
|
|
|
|
|
return XFurnitureManager.GetIconByFurniture(furnitureData)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.GetIconByFurniture(furniture)
|
|
|
|
|
if not furniture then
|
|
|
|
|
return ""
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local baseIcon = XFurnitureManager.GetFurnitureIconByConfigId(furniture.ConfigId)
|
|
|
|
|
|
|
|
|
|
local furnitureColour = XFurnitureConfigs.GetFurnitureColour(furniture.ConfigId)
|
|
|
|
|
if not furnitureColour then
|
|
|
|
|
return baseIcon
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local maxAttrKey = 0
|
|
|
|
|
local maxAttrVal = 0
|
|
|
|
|
-- local midAttrKey = 0
|
|
|
|
|
local midAttrVal = 0
|
|
|
|
|
|
|
|
|
|
for k, v in pairs(furniture.AttrList) do
|
|
|
|
|
if v >= maxAttrVal then
|
|
|
|
|
-- midAttrKey = maxAttrKey
|
|
|
|
|
midAttrVal = maxAttrVal
|
|
|
|
|
|
|
|
|
|
maxAttrKey = k
|
|
|
|
|
maxAttrVal = v
|
|
|
|
|
elseif v >= midAttrVal then
|
|
|
|
|
-- midAttrKey = k
|
|
|
|
|
midAttrVal = v
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local defaultIcon = (furnitureColour.DefaultFurnitureIcon == "") and baseIcon or furnitureColour.DefaultFurnitureIcon
|
|
|
|
|
local chooseIcon = (furnitureColour.FurnitureIcons[maxAttrKey] == "") and defaultIcon or furnitureColour.FurnitureIcons[maxAttrKey]
|
|
|
|
|
|
|
|
|
|
-- 最高和第二高值一致,则返回默认
|
|
|
|
|
if maxAttrVal == midAttrVal then
|
|
|
|
|
return defaultIcon
|
|
|
|
|
end
|
|
|
|
|
if midAttrVal == 0 then
|
|
|
|
|
return chooseIcon
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local attrOverRate = (maxAttrVal - midAttrVal) / midAttrVal * 100
|
|
|
|
|
if furnitureColour and attrOverRate >= furnitureColour.AttrIds[maxAttrKey] then
|
|
|
|
|
return chooseIcon
|
|
|
|
|
end
|
|
|
|
|
return defaultIcon
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function XFurnitureManager.GetTemplateCount(templateId)
|
|
|
|
|
local totalCount = 0
|
|
|
|
|
for _, v in pairs(XFurnitureManager.GetFurnitureDatas()) do
|
|
|
|
|
local isUsing = XFurnitureManager.CheckFurnitureUsing(v.Id)
|
|
|
|
|
if (not isUsing) and v.ConfigId == templateId then
|
|
|
|
|
totalCount = totalCount + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return totalCount
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XFurnitureManager.SetInReform(isInReforming)
|
2023-07-14 19:35:33 +00:00
|
|
|
|
IsInReforming = isInReforming
|
|
|
|
|
end
|
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
function XFurnitureManager.GetInReform()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
return IsInReforming
|
|
|
|
|
end
|
2024-09-01 20:49:41 +00:00
|
|
|
|
|
|
|
|
|
-- 检测家具是否溢出 true为溢出
|
|
|
|
|
function XFurnitureManager.CheckFurnitureSlopLimit()
|
|
|
|
|
local allCount = XFurnitureManager.GetAllFurnitureCount()
|
|
|
|
|
if allCount > XFurnitureConfigs.MaxTotalFurnitureCount then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- 家具一键改装
|
|
|
|
|
function XFurnitureManager.OpenFurnitureOrderBuild(roomId, templateRoomId, templateRoomType, title, subTitle)
|
|
|
|
|
local percent = XDataCenter.DormManager.GetDormTemplatePercent(roomId, templateRoomId)
|
|
|
|
|
if percent >= 100 then --已经完成,无需跳转制作
|
|
|
|
|
XUiManager.TipText("DormTemplateTargetFinished")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
local uiName = "UiFurnitureOrderBuild"
|
|
|
|
|
if XLuaUiManager.IsUiShow(uiName) or XLuaUiManager.IsUiLoad(uiName) then
|
|
|
|
|
XLuaUiManager.Remove(uiName)
|
|
|
|
|
end
|
|
|
|
|
XLuaUiManager.Open(uiName, roomId, templateRoomId, templateRoomType, title, subTitle)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- 跳转购买图纸
|
|
|
|
|
---@param furnitureConfigId number 需要购买图纸的家具id
|
|
|
|
|
---@param buyCount number 购买数量
|
|
|
|
|
---@param successCb function 购买成功回调
|
|
|
|
|
---@return void
|
|
|
|
|
--------------------------
|
|
|
|
|
function XFurnitureManager.JumpToBuyDrawing(furnitureConfigId, buyCount, successCb)
|
|
|
|
|
local template = XFurnitureConfigs.GetFurnitureTemplateById(furnitureConfigId)
|
|
|
|
|
if not template or not XTool.IsNumberValid(template.PicId) then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local itemId = template.PicId
|
|
|
|
|
local asset = XItemConfigs.GetBuyAssetTemplateById(itemId)
|
|
|
|
|
if not asset then
|
|
|
|
|
XUiManager.TipText("DormNotBuyDrawing")
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XUiManager.OpenBuyAssetPanel(itemId, successCb, nil, buyCount)
|
|
|
|
|
end
|
2023-07-14 19:35:33 +00:00
|
|
|
|
|
2024-09-01 20:49:41 +00:00
|
|
|
|
Init()
|
2023-07-14 19:35:33 +00:00
|
|
|
|
return XFurnitureManager
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
XRpc.NotifyFurnitureOperate = function(data)
|
|
|
|
|
XDataCenter.FurnitureManager.NotifyFurnitureOperate(data.OperateList)
|
|
|
|
|
end
|