Files
Main/Assets/GameAssets/Resources/Lua/Logic/YYHD/YYHDBaseData.lua

196 lines
6.2 KiB
Lua
Raw Normal View History

2025-01-25 04:38:09 +08:00
------------------------------------------------
--作者: 杨全福
--日期: 2020-08-08
--文件: YYHDBaseData.lua
--模块: YYHDBaseData
--描述: 运营活动基础数据
------------------------------------------------
--自定义条件
local RedPointCustomCondition = CS.Thousandto.Code.Logic.RedPointCustomCondition
--战力条件
local RedPointFightPowerCondition = CS.Thousandto.Code.Logic.RedPointFightPowerCondition
--物品条件
local RedPointItemCondition = CS.Thousandto.Code.Logic.RedPointItemCondition
--等级条件
local RedPointLevelCondition = CS.Thousandto.Code.Logic.RedPointLevelCondition
--任务条件
local RedPointTaskCondition = CS.Thousandto.Code.Logic.RedPointTaskCondition
local YYHDBaseData = {
--活动类型
TypeId = 0,
--最小开放等级
MinLevel = 0,
--最大开放等级
MaxLevel = 0,
--标签(用于区分展示在哪个活动标签下)
Tag = 0,
--活动名称
Name = nil,
--活动开始时间(UTC时间进行计算时需要加上时区)
BeginTime = 0,
--活动结束时间(UTC时间进行计算时需要加上时区)
EndTime = 0,
--活动是否开启
IsOpen = false,
--排序值
SortValue = 0,
--红点dataid列表
RedPointDataids = nil,
--是否显示到活动列表
IsShowInList = true,
--是否激活
ActiveState = false,
--使用的逻辑类型
UseLogicId = 0,
--使用的uiid
UseUIId = 0,
}
function YYHDBaseData:New(typeId)
local _m = Utils.DeepCopy(self)
_m.TypeId = typeId
local _cfg = DataConfig.DataActivityYunying[typeId]
_m.UseLogicId = _cfg.LogicId
_m.UseUIId = _cfg.UseUiId
return _m
end
--解析基础配置数据
function YYHDBaseData:ParseBaseCfgData(jsonTable)
self.MinLevel = jsonTable.minLv
self.MaxLevel = jsonTable.maxLv
self.Tag = jsonTable.tag
self.Name = jsonTable.name
self.BeginTime = math.floor(jsonTable.beginTime / 1000)
self.EndTime = math.floor(jsonTable.endTime / 1000)
self.IsOpen = jsonTable.isDelete == 0
self.SortValue = jsonTable.sort
--先删除所有红点
self:RemoveRedPoint(nil)
self.ActiveState = self:IsActive()
end
--判断活动是否开启
function YYHDBaseData:IsActive()
--活动是否开启
if not self.IsOpen then
self.ActiveState = false
return false
end
local _lpLevel = GameCenter.GameSceneSystem:GetLocalPlayerLevel()
--判断玩家等级是否足够
if _lpLevel < self.MinLevel or _lpLevel > self.MaxLevel then
self.ActiveState = false
return false
end
--判断是否在开启时间范围内(都是UTC时间所以直接判断值大小就可以了)
local _serverTime = GameCenter.HeartSystem.ServerTime
if self.BeginTime > _serverTime or self.EndTime < _serverTime then
self.ActiveState = false
return false
end
self.ActiveState = true
return true
end
function YYHDBaseData:ToUsedDataId(dataId)
return self.Tag * 1000000000000 + self.UseLogicId * 1000000000 + dataId
end
--增加红点条件,将使用红点系统进行判断
--itemCon = {{物品id,物品数量},{物品id,物品数量}...}
--levelCon = 等级数值
--fightPowerCon = 战斗力数值
--cutCon = true or false
--taskCon = 任务id
function YYHDBaseData:AddRedPoint(dataId, itemCon, levelCon, fightPowerCon, cutCon, taskCon)
if dataId == nil then
return
end
if dataId < 0 or dataId >= 1000000000 then
Debug.LogError("由于活动红点dataId不能大于等于1000000000增加红点失败")
return
end
if itemCon == nil and levelCon == nil and fightPowerCon == nil and cutCon == nil and taskCon == nil then
return
end
if not self:IsActive() then
--未开启的活动不增加红点
return
end
--先删除老的条件
self:RemoveRedPoint(dataId)
local _conTable = {}
local _index = 1
if itemCon ~= nil then
for i = 1, #itemCon do
_conTable[_index] = RedPointItemCondition(itemCon[i][1],itemCon[i][2])
_index = _index + 1
end
end
if levelCon ~= nil then
_conTable[_index] = RedPointLevelCondition(levelCon)
_index = _index + 1
end
if fightPowerCon ~= nil then
_conTable[_index] = RedPointFightPowerCondition(fightPowerCon)
_index = _index + 1
end
if cutCon ~= nil then
_conTable[_index] = RedPointCustomCondition(cutCon)
_index = _index + 1
end
if taskCon ~= nil then
_conTable[_index] = RedPointTaskCondition(taskCon)
_index = _index + 1
end
if _index > 1 then
if self.RedPointDataids == nil then
self.RedPointDataids = List:New()
end
self.RedPointDataids:Add(dataId)
GameCenter.RedPointSystem:LuaAddFuncCondition(FunctionStartIdCode.YunYingHD, self:ToUsedDataId(dataId), _conTable)
end
end
--删除红点条件,dataId为nil表示清除本活动所有红点
function YYHDBaseData:RemoveRedPoint(dataId)
if dataId ~= nil then
--删除单个
if self.RedPointDataids ~= nil then
self.RedPointDataids:Remove(dataId)
end
GameCenter.RedPointSystem:RemoveFuncCondition(FunctionStartIdCode.YunYingHD, self:ToUsedDataId(dataId))
else
--清除所有
if self.RedPointDataids ~= nil then
for i = 1, #self.RedPointDataids do
GameCenter.RedPointSystem:RemoveFuncCondition(FunctionStartIdCode.YunYingHD, self:ToUsedDataId(self.RedPointDataids[i]))
end
self.RedPointDataids:Clear()
end
end
end
--是否显示红点,dataId为nil表示本活动的红点
function YYHDBaseData:IsShowRedPoint(dataId)
if dataId == nil then
if self.RedPointDataids ~= nil then
for i = 1, #self.RedPointDataids do
if GameCenter.RedPointSystem:OneConditionsIsReach(FunctionStartIdCode.YunYingHD, self:ToUsedDataId(self.RedPointDataids[i])) then
return true
end
end
end
return false
else
return GameCenter.RedPointSystem:OneConditionsIsReach(FunctionStartIdCode.YunYingHD, self:ToUsedDataId(dataId))
end
end
return YYHDBaseData