| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- local StoryData = class("StoryData", require("DataBase"))
- function StoryData:ctor()
- self.data = {}
- self.data.storyDatas = {}
- end
- function StoryData:InitStoryData(storyDatas)
- if #storyDatas == 0 then return end
- for _,v in pairs(storyDatas) do
- local id = Mathf.Round(v * 0.01)
- local val = v % 100
- self.data.storyDatas[id] = val
- end
- end
- function StoryData:RefreshStoryData(storyKV)
- if storyKV == nil then return end
- self.data.storyDatas[storyKV.key] = storyKV.value
- end
- function StoryData:GetStoryDatas()
- return self.data.storyDatas
- end
- function StoryData:CheckDataConditions(data)
- local conditionResult = true
- for k,v in pairs(data) do
- local id = v[1]
- local num = v[2]
- if self.data.storyDatas[id] == nil then
- local storyCfgData = ManagerContainer.CfgMgr:GetStoryDataById(id)
- if #storyCfgData.SelectionTexts > 0 then
- self.data.storyDatas[id] = 1
- else
- self.data.storyDatas[id] = 0
- end
- end
- if self.data.storyDatas[id] ~= num then
- conditionResult = false
- end
- end
- return conditionResult
- end
- function StoryData:RegisterNetEvents()
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ROLE_STORY_NTF, function(data)
- self:InitStoryChapterData(data)
- self:InitStoryData(data.Story)
- end)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ROLE_STORY_ACK, function(data)
- if data.error == Enum.NetErrorCode.ERROR_OK then
- self:RefreshStoryData(data.story_id)
- end
- end)
- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_NEW_MAP_CARTOON_ACK, function(data)
- if data.error == Enum.NetErrorCode.ERROR_OK then
- self:RefreshStoryChapterData(data)
- end
- -- 避免流程卡住,则需要不管是否存储成功,都算完成
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.STORY_DATA_CHANGED)
- end)
- end
- function StoryData:Clear()
- self.data = {}
- self.data.storyDatas = {}
- end
- function StoryData:Destroy()
- if self.Clear then
- self:Clear()
- end
- self:UnRegisterNetEvents()
- end
- function StoryData:UnRegisterNetEvents()
- end
- function StoryData:InitStoryChapterData(data)
- local changed = false
- local storyChapterData = self.data.storyChapterData
- if not storyChapterData then
- storyChapterData = {}
- self.data.storyChapterData = storyChapterData
- end
- if data then
- local mapCart = data.map_cart
- if mapCart then
- local id = mapCart.key
- local state = mapCart.value
- if id ~= nil and state ~= nil then
- storyChapterData.id = id
- storyChapterData.state = state
- changed = true
- end
- end
- end
- return changed
- end
- function StoryData:RefreshStoryChapterData(data)
- if not data then return false end
- return self:InitStoryChapterData(data)
- end
- function StoryData:GetStateStoryChapterId(id)
- if not id then return Enum.StoryChapterState.NotStart end
- local storyChapterData = self.data.storyChapterData
- if not storyChapterData then return Enum.StoryChapterState.NotStart end
- if storyChapterData.id == nil then return Enum.StoryChapterState.NotStart end
- if id > storyChapterData.id then return Enum.StoryChapterState.NotStart end
- if id == storyChapterData.id then
- if storyChapterData.state < 1 then
- return Enum.StoryChapterState.NotStart
- elseif storyChapterData.state == 1 then
- return Enum.StoryChapterState.Start
- end
- end
- return Enum.StoryChapterState.End
- end
- return StoryData
|