StoryData.lua 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. local StoryData = class("StoryData", require("DataBase"))
  2. function StoryData:ctor()
  3. self.data = {}
  4. self.data.storyDatas = {}
  5. end
  6. function StoryData:InitStoryData(storyDatas)
  7. if #storyDatas == 0 then return end
  8. for _,v in pairs(storyDatas) do
  9. local id = Mathf.Round(v * 0.01)
  10. local val = v % 100
  11. self.data.storyDatas[id] = val
  12. end
  13. end
  14. function StoryData:RefreshStoryData(storyKV)
  15. if storyKV == nil then return end
  16. self.data.storyDatas[storyKV.key] = storyKV.value
  17. end
  18. function StoryData:GetStoryDatas()
  19. return self.data.storyDatas
  20. end
  21. function StoryData:CheckDataConditions(data)
  22. local conditionResult = true
  23. for k,v in pairs(data) do
  24. local id = v[1]
  25. local num = v[2]
  26. if self.data.storyDatas[id] == nil then
  27. local storyCfgData = ManagerContainer.CfgMgr:GetStoryDataById(id)
  28. if #storyCfgData.SelectionTexts > 0 then
  29. self.data.storyDatas[id] = 1
  30. else
  31. self.data.storyDatas[id] = 0
  32. end
  33. end
  34. if self.data.storyDatas[id] ~= num then
  35. conditionResult = false
  36. end
  37. end
  38. return conditionResult
  39. end
  40. function StoryData:RegisterNetEvents()
  41. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ROLE_STORY_NTF, function(data)
  42. self:InitStoryChapterData(data)
  43. self:InitStoryData(data.Story)
  44. end)
  45. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ROLE_STORY_ACK, function(data)
  46. if data.error == Enum.NetErrorCode.ERROR_OK then
  47. self:RefreshStoryData(data.story_id)
  48. end
  49. end)
  50. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_NEW_MAP_CARTOON_ACK, function(data)
  51. if data.error == Enum.NetErrorCode.ERROR_OK then
  52. self:RefreshStoryChapterData(data)
  53. end
  54. -- 避免流程卡住,则需要不管是否存储成功,都算完成
  55. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.STORY_DATA_CHANGED)
  56. end)
  57. end
  58. function StoryData:Clear()
  59. self.data = {}
  60. self.data.storyDatas = {}
  61. end
  62. function StoryData:Destroy()
  63. if self.Clear then
  64. self:Clear()
  65. end
  66. self:UnRegisterNetEvents()
  67. end
  68. function StoryData:UnRegisterNetEvents()
  69. end
  70. function StoryData:InitStoryChapterData(data)
  71. local changed = false
  72. local storyChapterData = self.data.storyChapterData
  73. if not storyChapterData then
  74. storyChapterData = {}
  75. self.data.storyChapterData = storyChapterData
  76. end
  77. if data then
  78. local mapCart = data.map_cart
  79. if mapCart then
  80. local id = mapCart.key
  81. local state = mapCart.value
  82. if id ~= nil and state ~= nil then
  83. storyChapterData.id = id
  84. storyChapterData.state = state
  85. changed = true
  86. end
  87. end
  88. end
  89. return changed
  90. end
  91. function StoryData:RefreshStoryChapterData(data)
  92. if not data then return false end
  93. return self:InitStoryChapterData(data)
  94. end
  95. function StoryData:GetStateStoryChapterId(id)
  96. if not id then return Enum.StoryChapterState.NotStart end
  97. local storyChapterData = self.data.storyChapterData
  98. if not storyChapterData then return Enum.StoryChapterState.NotStart end
  99. if storyChapterData.id == nil then return Enum.StoryChapterState.NotStart end
  100. if id > storyChapterData.id then return Enum.StoryChapterState.NotStart end
  101. if id == storyChapterData.id then
  102. if storyChapterData.state < 1 then
  103. return Enum.StoryChapterState.NotStart
  104. elseif storyChapterData.state == 1 then
  105. return Enum.StoryChapterState.Start
  106. end
  107. end
  108. return Enum.StoryChapterState.End
  109. end
  110. return StoryData