源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

300 lines
9.7 KiB

  1. ChatDressSubType = ChatDressSubType or
  2. {
  3. BUBBLE = 1,
  4. HEAD = 2,
  5. BACKGROUND = 3,
  6. ROLE_HEAD = 4,
  7. }
  8. ChatDressModel = ChatDressModel or BaseClass(BaseModel)
  9. ChatDressModel.HeadType = {
  10. Career = 1,
  11. Skill = 2,
  12. Custom = 3
  13. }
  14. ChatDressModel.SAVE_CUSTOM_HEAD = "ChatDressModel.SAVE_CUSTOM_HEAD"
  15. ChatDressModel.TEST_CHANGE_HEAD = "ChatDressModel.TEST_CHANGE_HEAD"
  16. ChatDressModel.AcitiveState = {
  17. Actived = 1,--已激活
  18. Locked = 2,--未激活且不能激活
  19. CanActive = 3,--可以激活
  20. }
  21. function ChatDressModel:__init()
  22. ChatDressModel.Instance = self
  23. self.bubble_list = {}
  24. self.head_list = {}
  25. self.background_list = {}
  26. self.role_head_list = {}
  27. self.handbook_data = {lv = 0,exp = 0} --图鉴信息
  28. self.bubble_data = nil -- 泡泡信息
  29. self.head_data = nil -- 头像框信息
  30. self.role_head_data = nil -- 头像信息
  31. self.background_data = nil -- 背景信息
  32. self.photo_operate = 0
  33. self.max_lv = 5 --单个装扮最高等级
  34. self.last_gm_bubble = -1
  35. self.last_gm_head = -1
  36. self.last_gm_background = -1
  37. self.use_dress_list = {} -- 保存玩家最新的使用列表,mainrole列表那并不是最新
  38. self.model_tabBtn_index = 1
  39. end
  40. function ChatDressModel:getInstance()
  41. if ChatDressModel.Instance==nil then
  42. ChatDressModel.New()
  43. end
  44. return ChatDressModel.Instance
  45. end
  46. function ChatDressModel:GetInstance()
  47. if ChatDressModel.Instance==nil then
  48. ChatDressModel.New()
  49. end
  50. return ChatDressModel.Instance
  51. end
  52. function ChatDressModel:GetUseDressList( )
  53. return self.use_dress_list
  54. end
  55. -- 获取装扮形象列表
  56. function ChatDressModel:GetChatDressFigure(type)
  57. if type == ChatDressSubType.BUBBLE then
  58. if #self.bubble_list == 0 then
  59. self.last_gm_bubble = gm_flag
  60. self.bubble_list = {}
  61. local cfg = Config.Dressup
  62. for k,v in pairs(cfg) do
  63. if v.dress_type == ChatDressSubType.BUBBLE then
  64. table.insert(self.bubble_list,v)
  65. end
  66. end
  67. table.sort(self.bubble_list,function(a,b) return a.dress_id<b.dress_id end)
  68. end
  69. return self.bubble_list
  70. elseif type == ChatDressSubType.HEAD then
  71. if #self.head_list == 0 then
  72. self.head_list = {}
  73. self.last_gm_head = gm_flag
  74. local cfg = Config.Dressup
  75. for k,v in pairs(cfg) do
  76. if v.dress_type == ChatDressSubType.HEAD then
  77. table.insert(self.head_list,v)
  78. end
  79. end
  80. table.sort(self.head_list,function(a,b) return a.dress_id<b.dress_id end)
  81. end
  82. return self.head_list
  83. elseif type == ChatDressSubType.BACKGROUND then
  84. if #self.background_list == 0 then
  85. self.background_list = {}
  86. self.last_gm_background = gm_flag
  87. local cfg = Config.Dressup
  88. for k,v in pairs(cfg) do
  89. if v.dress_type == ChatDressSubType.BACKGROUND then
  90. table.insert(self.background_list,v)
  91. end
  92. end
  93. table.sort(self.background_list,function(a,b) return a.dress_id<b.dress_id end)
  94. end
  95. return self.background_list
  96. elseif type == ChatDressSubType.ROLE_HEAD then
  97. if #self.role_head_list == 0 or RoleManager:getInstance().mainRoleInfo.turn ~= self.turn then
  98. self.role_head_list = {}
  99. local career = RoleManager:getInstance().mainRoleInfo.career
  100. self.turn = RoleManager:getInstance().mainRoleInfo.turn
  101. local career_list
  102. for k, v in pairs(Config.Profilephoto) do
  103. career_list = stringtotable(v.career)
  104. for k2, v2 in ipairs(career_list) do
  105. -- 目标转职是0且【目标职业是0】或【存在玩家本身的职业】,代表通用(即运营活动)头像
  106. if v.turn <= self.turn and ((#career_list == 1 and v2 == 0) or (#career_list >= 1 and v2 == career)) then
  107. --开始构造 变成上面的同种样式 吐了
  108. self.role_head_list[#self.role_head_list+1] = v
  109. self.role_head_list[#self.role_head_list].dress_id = v.photo_id
  110. self.role_head_list[#self.role_head_list].dress_type = ChatDressSubType.ROLE_HEAD
  111. self.role_head_list[#self.role_head_list].dress_name = v.name
  112. self.role_head_list[#self.role_head_list].dress_desc = v.desc
  113. self.role_head_list[#self.role_head_list].dress_starup_attr = v.attr_list
  114. self.role_head_list[#self.role_head_list].sequence = v.photo_id--用配置id当排序
  115. self.role_head_list[#self.role_head_list].dress_consume_id = v.photo_id--依旧没有
  116. self.role_head_list[#self.role_head_list].is_default = v.turn == 0 and #career_list == 1 and v2 == career--转职0且和自己职业一样的是默认
  117. break
  118. end
  119. end
  120. end
  121. end
  122. return self.role_head_list
  123. end
  124. end
  125. -- 根据type、id判断dressitem是否已激活
  126. function ChatDressModel:FindDressIsActive(type,id)
  127. local data = nil
  128. if type == ChatDressSubType.BUBBLE then
  129. data = self.bubble_data
  130. elseif type == ChatDressSubType.HEAD then
  131. data = self.head_data
  132. elseif type == ChatDressSubType.BACKGROUND then
  133. data = self.background_data
  134. elseif type == ChatDressSubType.ROLE_HEAD then
  135. data = self.role_head_data
  136. end
  137. if data == nil then return false end
  138. local isActive = false
  139. local figure_list = data.enable_list
  140. for k,v in pairs(figure_list) do
  141. if tonumber(v.dress_id) == tonumber(id) then
  142. isActive = true
  143. break
  144. end
  145. end
  146. return isActive
  147. end
  148. -- 获取当前等级对应最大exp
  149. function ChatDressModel:GetMaxExp(id,lv)
  150. local cfg = Config.Dressup[id]
  151. if cfg == nil then return end
  152. return cfg.dress_starup_exp
  153. end
  154. function ChatDressModel:GetUnitExp(id,lv)
  155. local cfg = Config.Dressup[id]
  156. if cfg == nil then return end
  157. return cfg.dress_acti_exp
  158. end
  159. function ChatDressModel:UpdateDressData(data)
  160. if data == nil then return end
  161. if data.dress_type == ChatDressSubType.BUBBLE then
  162. self.bubble_data = data
  163. elseif data.dress_type == ChatDressSubType.HEAD then
  164. self.head_data = data
  165. elseif data.dress_type == ChatDressSubType.BACKGROUND then
  166. self.background_data = data
  167. elseif data.dress_type == ChatDressSubType.ROLE_HEAD then
  168. self.role_head_data = data
  169. end
  170. self.use_dress_list = self.use_dress_list or {}
  171. if data.dress_type and data.use_dress_id and data.dress_type ~= ChatDressSubType.BACKGROUND then -- 背景已经取消了,先删除掉
  172. local cfg = self:GetChatDressFigure(data.dress_type)
  173. self.use_dress_list[data.dress_type] = data.use_dress_id ~= 0 and data.use_dress_id or cfg[1].dress_id -- 没穿戴时默认穿上配置第一个(默认装扮)
  174. end
  175. end
  176. -- 激活成功返回后的操作
  177. function ChatDressModel:UpdataEnableList(data)
  178. if data == nil then return end
  179. if data.dress_type == ChatDressSubType.BUBBLE then
  180. table.insert(self.bubble_data.enable_list,{dress_id = data.dress_id})
  181. elseif data.dress_type == ChatDressSubType.HEAD then
  182. table.insert(self.head_data.enable_list,{dress_id = data.dress_id})
  183. elseif data.dress_type == ChatDressSubType.BACKGROUND then
  184. table.insert(self.background_data.enable_list,{dress_id = data.dress_id})
  185. elseif data.dress_type == ChatDressSubType.ROLE_HEAD then
  186. table.insert(self.role_head_data.enable_list,{dress_id = data.dress_id})
  187. end
  188. self:Fire(ChatDressEvent.DRESS_ACTIVATE_SUCCESS,data)
  189. end
  190. -- 使用装扮成功的操作
  191. function ChatDressModel:UpdataUsingDress(data)
  192. if data == nil or data.dressup_list == nil then return end
  193. for i,v in ipairs(data.dressup_list) do
  194. if self.bubble_data and v.dress_type == ChatDressSubType.BUBBLE then
  195. self.bubble_data.use_dress_id = v.dress_id
  196. elseif self.head_data and v.dress_type == ChatDressSubType.HEAD then
  197. self.head_data.use_dress_id = v.dress_id
  198. elseif self.background_data and v.dress_type == ChatDressSubType.BACKGROUND then
  199. self.background_data.use_dress_id = v.dress_id
  200. elseif self.role_head_data and v.dress_type == ChatDressSubType.ROLE_HEAD then
  201. self.role_head_data.use_dress_id = v.dress_id
  202. end
  203. end
  204. self:Fire(ChatDressEvent.USE_DRESS_SUCCESS, data.dressup_list) -- 传回view
  205. end
  206. -- 判断是否可激活
  207. function ChatDressModel:CanActivate(type,id)
  208. local isActive = self:FindDressIsActive(type,id)
  209. if isActive == true then return false end
  210. local goods_id = id
  211. local num = GoodsModel:getInstance():GetTypeGoodsNum(goods_id)
  212. if num >= 1 then
  213. return true
  214. else
  215. return false
  216. end
  217. end
  218. -- 判断子界面是否有红点
  219. function ChatDressModel:ShowSubRedPoint(type)
  220. local list = self:GetChatDressFigure(type)
  221. if list == nil then return false end
  222. local isActive = false
  223. for k,v in pairs(list) do
  224. isActive = self:FindDressIsActive(type,v.dress_id)
  225. if self:CanActivate(type,v.dress_id) then
  226. return true
  227. end
  228. end
  229. return false
  230. end
  231. -- 判断装扮是否有红点
  232. function ChatDressModel:ShowChatDressRedPoint()
  233. if RoleManager.Instance.mainRoleInfo.level < Config.Moduleid[112].open_lv then
  234. return false
  235. end
  236. local bool = (self:ShowSubRedPoint(ChatDressSubType.BUBBLE) or self:ShowSubRedPoint(ChatDressSubType.HEAD) or self:ShowSubRedPoint(ChatDressSubType.BACKGROUND))
  237. return bool
  238. end
  239. function ChatDressModel:UpdateRedDot()
  240. GlobalEventSystem:Fire(EventName.REFRESH_CHATDRESS_RED_DOT)
  241. end
  242. function ChatDressModel:IsDefaultDressId(dress_id)
  243. if dress_id == 425001 or dress_id == 420001 or dress_id == 427501 then
  244. return true
  245. end
  246. return false
  247. end
  248. ------------------------------------------------以下是新的-------------------
  249. --获取当前穿戴装扮id
  250. function ChatDressModel:GetCurUseDressId( type )
  251. local using_id = 0
  252. if type == ChatDressSubType.BUBBLE then
  253. if self.bubble_data == nil then return 0 end
  254. using_id = self.bubble_data.use_dress_id
  255. elseif type == ChatDressSubType.HEAD then
  256. if self.head_data == nil then return 0 end
  257. using_id = self.head_data.use_dress_id
  258. elseif type == ChatDressSubType.BACKGROUND then
  259. if self.background_data == nil then return 0 end
  260. using_id = self.background_data.use_dress_id
  261. elseif type == ChatDressSubType.ROLE_HEAD then
  262. if self.role_head_data == nil then return 0 end
  263. using_id = self.role_head_data.use_dress_id
  264. end
  265. return using_id
  266. end
  267. function ChatDressModel:SetJumpInfo( info )
  268. self.jump_info = info
  269. end
  270. function ChatDressModel:GetJumpInfo( )
  271. return self.jump_info
  272. end
  273. function ChatDressModel:CleanJumpInfo( )
  274. self.jump_info = nil
  275. end