Files
Main/Assets/GameAssets/Resources/Lua/Logic/Achievement/AchievementInfo.lua

85 lines
2.9 KiB
Lua
Raw Normal View History

2025-01-25 04:38:09 +08:00
------------------------------------------------
--作者xihan
--日期2019-05-17
--文件AchievementItem.lua
--模块AchievementItem
--描述成就Info
------------------------------------------------
local L_Tonumber = tonumber;
local L_SplitStr = Utils.SplitStr;
local L_DeepCopy = Utils.DeepCopy;
--成就Info
local AchievementInfo = {
--配置Id
Id = nil,
--成就[配置表的数据,严禁修改]
DataAchievementItem = nil,
--成就类型[配置表的数据,严禁修改]
DataAchievementTypeItem = nil,
--功能Id
FunctionId = nil,
--需要达成的数量
Count = nil,
--当前状态(AchievementState枚举类型)
State = nil,
--奖励ItemId
AwardItemId = nil,
--奖励Item数量
AwardItemCount = nil,
--奖励Item是否绑定
AwardItemBind = nil,
--进度
Progress = nil,
}
-- AchievementItem.__index = AchievementItem
local function InitData(self ,DataAchievementItem, DataAchievementTypeItem)
self.Id = DataAchievementItem.Id;
self.DataAchievementItem = DataAchievementItem;
self.DataAchievementTypeItem = DataAchievementTypeItem;
local _t = L_SplitStr(DataAchievementItem.Condition, "_");
self.FunctionId = L_Tonumber(_t[1]);
self.Count = L_Tonumber(_t[#_t]);
local _award = L_SplitStr(DataAchievementItem.Item, "_");
self.AwardItemId = L_Tonumber(_award[1]);
self.AwardItemCount = L_Tonumber(_award[2]);
self.AwardItemBind = L_Tonumber(_award[3]);
self.State = AchievementStateEnum.None;
end
function AchievementInfo:New(id)
-- local _data = setmetatable({},self)
local _data = L_DeepCopy(self)
local DataAchievement = DataConfig.DataAchievement;
local DataAchievementType = DataConfig.DataAchievementType;
local DataAchievementItem = DataAchievement[id]
InitData(_data, DataAchievementItem, DataAchievementType[DataAchievementItem.BigType])
return _data
end
function AchievementInfo:NewAll(DataTypeDic, DataIdDic)
local DataAchievementType = DataConfig.DataAchievementType;
DataConfig.DataAchievement:Foreach(function(_, v)
-- local _data = setmetatable({},self)
local _data = L_DeepCopy(self)
InitData(_data, v, DataAchievementType[v.BigType]);
if not DataTypeDic:ContainsKey(v.BigType) then
DataTypeDic:Add(v.BigType,Dictionary:New());
end
local _DataTypeDicBigType = DataTypeDic[v.BigType];
if not _DataTypeDicBigType:ContainsKey(_data.FunctionId) then
_DataTypeDicBigType:Add(_data.FunctionId, List:New());
end
_DataTypeDicBigType[_data.FunctionId]:Add(_data);
DataIdDic:Add(v.Id,_data);
end)
DataTypeDic:SortKey(function(a, b) return a < b end)
-- DataTypeDic:Foreach(function(_, v)
-- table.sort(v, function(a, b)
-- return a.Count < b.Count;
-- end)
-- end)
end
return AchievementInfo