源战役客户端
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

184 lines
5.1 KiB

  1. StarMapModel = StarMapModel or BaseClass(BaseModel)
  2. StarMapModel.REQUEST_STAR_MAP_DATA = "REQUEST_STAR_MAP_DATA" -- 请求星图信息
  3. StarMapModel.UPDATE_STAR_MAP_DATA = "UPDATE_STAR_MAP_DATA" -- 更新星图信息
  4. StarMapModel.LIGHT_STAR_POINT = "LIGHT_STAR_POINT" -- 点亮星点
  5. StarMapModel.LIGHT_STAR_POINT_SUCCESS = "LIGHT_STAR_POINT_SUCCESS" -- 成功点亮星点
  6. StarMapModel.CLICK_POINT_ITEM = "CLICK_POINT_ITEM" -- 点击星点
  7. StarMapModel.OPEN_STAGE_VIEW = "OPEN_STAGE_VIEW" -- 打开阶段目标
  8. StarMapModel.UPDATE_RED_POINT = "UPDATE_RED_POINT" -- 星图红点
  9. StarMapModel.STAR_POWER_ID = 36200001 -- 星力物品id
  10. function StarMapModel:__init()
  11. StarMapModel.Instance = self
  12. self.starMap_data = nil
  13. end
  14. function StarMapModel:getInstance()
  15. if StarMapModel.Instance == nil then
  16. StarMapModel.New()
  17. end
  18. return StarMapModel.Instance
  19. end
  20. -- 获取星点信息
  21. function StarMapModel:GetStarMapData(id)
  22. id = id > 0 and id or 1
  23. local cfg = Config.Starmap
  24. if cfg == nil or cfg[id] == nil then return end
  25. -- 当为该阶的最后一级时,显示下一阶的星点
  26. if cfg[id+1] ~= nil and cfg[id+1].class_id ~= cfg[id].class_id then
  27. id = id +1
  28. end
  29. return cfg[id]
  30. end
  31. function StarMapModel:GetStarPointCosume(id)
  32. local cfg = Config.Starmap[id]
  33. if cfg == nil then return end
  34. return cfg.consume
  35. end
  36. -- 获得该阶段的星点列表
  37. function StarMapModel:GetStarPointList(id)
  38. local cfg = Config.Starmap
  39. if cfg == nil or cfg[id] == nil then return end
  40. -- 当为该阶的最后一级时,显示下一阶的星点
  41. if cfg[id+1] ~= nil and cfg[id+1].class_id ~= cfg[id].class_id then
  42. id = id +1
  43. end
  44. local stage = cfg[id].class_id
  45. local cons = cfg[id].cons_id
  46. local point_list = {}
  47. for k,v in pairs(cfg) do
  48. if v.cons_id== cons and v.class_id == stage and v.point_id > 0 then
  49. table.insert(point_list,v)
  50. end
  51. end
  52. table.sort(point_list,function(a,b) return a.star_map_id < b.star_map_id end)
  53. return point_list
  54. end
  55. -- 获得星点的属性
  56. function StarMapModel:GetStarPointProp(id)
  57. local cfg = Config.Starmap[id]
  58. if cfg == nil then return end
  59. local list = {}
  60. local attr_list = ErlangParser:GetInstance():Parse(cfg.attr)
  61. local last_cfg = Config.Starmap[id-1]
  62. if last_cfg == nil or ErlangParser:GetInstance():Parse(last_cfg.attr) == {} then
  63. list = attr_list
  64. else
  65. local last_attr = ErlangParser:GetInstance():Parse(last_cfg.attr)
  66. for i = 1,#attr_list do
  67. if attr_list[i][2] - last_attr[i][2] > 0 then
  68. table.insert(list,{attr_list[i][1],attr_list[i][2] - last_attr[i][2]})
  69. end
  70. end
  71. end
  72. return list
  73. end
  74. -- 获得星点的星座名称阶段级数(for stagetip)
  75. function StarMapModel:GetPointId(id)
  76. local cfg = Config.Starmap[id]
  77. if cfg == nil then return end
  78. return Trim(cfg.cons_name),cfg.class_id,cfg.point_id
  79. end
  80. -- 获取战力
  81. function StarMapModel:GetCombat(prop_list)
  82. local list = {}
  83. for i = 1,#prop_list do
  84. list[i] = {[1] = prop_list[i].attr_type,[2] = prop_list[i].attr_value}
  85. end
  86. return GetFighting(list)
  87. end
  88. -- 获得当前额外属性
  89. function StarMapModel:GetNowExtraAttr2(id)
  90. local cfg = Config.Starmap
  91. local now_list = cfg[id].extra_attr
  92. local final_id = id
  93. for i = id-1,1,-1 do
  94. if cfg[i].extra_attr ~= now_list then
  95. break
  96. end
  97. final_id = i
  98. end
  99. local attr_list = ErlangParser:GetInstance():Parse(cfg[final_id].extra_attr)
  100. return attr_list,final_id
  101. end
  102. -- 获得下一额外属性
  103. function StarMapModel:GetNextExtraAttr2(id)
  104. local cfg = Config.Starmap
  105. local now_list = cfg[id].extra_attr
  106. local final_id = id
  107. for i = id+1,#cfg do
  108. final_id = i
  109. if cfg[i].extra_attr ~= now_list then
  110. break
  111. end
  112. end
  113. local attr_list = ErlangParser:GetInstance():Parse(cfg[final_id].extra_attr)
  114. return attr_list,final_id
  115. end
  116. -- 获得当前额外属性
  117. function StarMapModel:GetNowExtraAttr(id)
  118. local cfg = Config.Starmap
  119. local attr_list = {}
  120. for i = id,1,-1 do
  121. attr_list = ErlangParser:GetInstance():Parse(cfg[i].extra_attr)
  122. if #attr_list > 0 then
  123. return attr_list,i
  124. end
  125. end
  126. end
  127. -- 获得下级额外属性
  128. function StarMapModel:GetNextExtraAttr(id)
  129. local cfg = Config.Starmap
  130. local attr_list = {}
  131. for i = id+1,#cfg do
  132. attr_list = ErlangParser:GetInstance():Parse(cfg[i].extra_attr)
  133. if #attr_list > 0 then
  134. return attr_list,i
  135. end
  136. end
  137. end
  138. -- 获取星点生成位置
  139. function StarMapModel:GetPointPos(id)
  140. local cfg = Config.ConfigStarPoint.PointPos[id]
  141. if cfg == nil then return end
  142. return cfg
  143. end
  144. ------- 协议相关 ---------------
  145. function StarMapModel:UpdateStarMapData(data)
  146. if data == nil then return end
  147. self.starMap_data = data
  148. self:Fire(StarMapModel.UPDATE_STAR_MAP_DATA,data)
  149. self:Fire(StarMapModel.UPDATE_RED_POINT)
  150. end
  151. function StarMapModel:UpdateStarPower(data)
  152. if data == nil or self.starMap_data == nil or data.currency_id ~= StarMapModel.STAR_POWER_ID then return end
  153. self.starMap_data.star_power = data.num
  154. self:Fire(StarMapModel.UPDATE_RED_POINT)
  155. end
  156. function StarMapModel:HaveRedPoint()
  157. if self.starMap_data == nil then return false end
  158. local cfg = Config.Starmap[self.starMap_data.star_map_id+1]
  159. if cfg == nil then return false end
  160. if self.starMap_data.star_power >= cfg.consume then return true end
  161. return false
  162. end