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

196 lines
6.2 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

------------------------------------------------
--作者: 杨全福
--日期: 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