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