源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

312 行
11 KiB

  1. GuildEventWarView = GuildEventWarView or BaseClass(BaseItem)
  2. local GuildEventWarView = GuildEventWarView
  3. function GuildEventWarView:__init()
  4. self.base_file = "guild"
  5. self.layout_file = "GuildEventWarView"
  6. self.model = GuildModel:getInstance()
  7. self.model:Fire(GuildModel.REQUEST_CCMD_EVENT,40500)
  8. self.select_pool_id = false
  9. self:Load()
  10. end
  11. GuildEventWarView.POOL_MAX_SHOW = 5
  12. GuildEventWarView.WIFE =
  13. {
  14. [1] = {min = 0,max = 20, res = "guild_event_war_item_wifi_4" },
  15. [2] = {min = 21,max = 30, res = "guild_event_war_item_wifi_3" },
  16. [3] = {min = 31,max = 40, res = "guild_event_war_item_wifi_2" },
  17. }
  18. function GuildEventWarView:Load_callback()
  19. self.nodes = {
  20. "bg:raw",
  21. "event_time:tmp",--活动时间
  22. "reddot:obj",
  23. -- 活动奖励容器
  24. "reward_scroll", "reward_scroll/Viewport/reward_con",
  25. -- 入口按钮
  26. "enter_btn:obj",
  27. "help_btn:obj",
  28. "title_txt_img:img",
  29. "guild_text:tmp",
  30. "leader_text:tmp",
  31. "vip:img",
  32. "server_group/server_back:obj",
  33. "server_group/server_scroll",
  34. "server_group/serber_bg:img",
  35. "server_group:obj",
  36. "server_group/server_scroll/Viewport/server_con",
  37. "cur_server_name:tmp",
  38. "cur_server_wifi:img",
  39. "cur_server_select_btn:obj",
  40. "cur_server_select_tips:obj",
  41. "open_tips_btn:obj",
  42. "open_tips_btn/open_tips_red:obj",
  43. }
  44. self:GetChildren(self.nodes)
  45. lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("guild_event_war_bg"), false)
  46. lua_resM:setOutsideImageSprite(self,self.title_txt_img_img,GameResPath.GetGuildImage("guild_event_war_txt1_pointfilter"))
  47. self:AddEvents()
  48. if self.need_refresh_evt_time then
  49. self:UpdateEventTime()
  50. self:UpdateView()
  51. end
  52. self.vip.transform.localScale = Vector3(0.8, 0.8, 0.8)
  53. self:RequestInfo()
  54. end
  55. function GuildEventWarView:AddEvents( )
  56. local on_click = function ( click_obj )
  57. if self.enter_btn_obj == click_obj then -- 进入本服团战
  58. self.model:Fire(GuildModel.ENTER_GUILD_WAR_SCENE, self.select_pool_id)
  59. elseif click_obj == self.help_btn_obj then
  60. EventSystem.Fire(GlobalEventSystem,EventName.OPEN_INSTRUCTION_VIEW, 40501)
  61. elseif click_obj == self.cur_server_select_btn_obj then
  62. self:SetSelectServerGroup(true)
  63. elseif click_obj == self.server_back_obj then
  64. self:SetSelectServerGroup(false)
  65. elseif click_obj == self.open_tips_btn_obj then
  66. self.model:SetWarActiveRedDot(405, 1, false)
  67. GuildModel.getInstance():Fire(GuildModel.OPEN_ACTIVE_OPEN_TIPS_VIEW, true)
  68. end
  69. end
  70. AddClickEvent(self.enter_btn_obj, on_click, LuaSoundManager.SOUND_UI.NONE)
  71. AddClickEvent(self.help_btn_obj, on_click, LuaSoundManager.SOUND_UI.NONE)
  72. AddClickEvent(self.server_back_obj, on_click, LuaSoundManager.SOUND_UI.NONE)
  73. AddClickEvent(self.cur_server_select_btn_obj, on_click, LuaSoundManager.SOUND_UI.NONE)
  74. AddClickEvent(self.open_tips_btn_obj, on_click, LuaSoundManager.SOUND_UI.NONE)
  75. local function updatePartyRed(type)
  76. if type == GuildEventType.GuildWar then
  77. self:UpdateRedDot()
  78. end
  79. end
  80. self:BindEvent(self.model, GuildModel.UPDATE_RED_DOT_BY_TYPE, updatePartyRed)
  81. local function updateMvp()
  82. self:UpdateLastMvp()
  83. end
  84. self:BindEvent(self.model, GuildModel.GUILD_WAR_LAST_MVP, updateMvp)
  85. local function updateServer()
  86. self:SelectServer(self.select_pool_id)
  87. end
  88. self:BindEvent(self.model, GuildModel.GUILD_WAR_BASE_INFO, updateServer)
  89. local function openSelectServer()
  90. self:SetSelectServerGroup(true)
  91. end
  92. self:BindEvent(self.model, GuildModel.OPEN_SELECT_SERVER, openSelectServer)
  93. local function onShowACtiveOpenTipsRed()
  94. self.open_tips_red_obj:SetActive(self.model:GetWarActiveRedDot(405, 1))
  95. end
  96. self:BindEvent(self.model, GuildModel.SHOW_ACTIVE_OPEN_TIPS_RED, onShowACtiveOpenTipsRed)
  97. self.open_tips_red_obj:SetActive(self.model:GetWarActiveRedDot(405, 1))
  98. end
  99. function GuildEventWarView:UpdateView( )
  100. self:UpdateLastMvp()
  101. self:UpdateRewardItem()
  102. self:UpdateRedDot()
  103. end
  104. -- 这里只传入活动日历中的活动时间相关数据,活动协议内容界面自己获取
  105. function GuildEventWarView:SetEventAcData( evt_time_data)
  106. self.evt_time_data = evt_time_data
  107. if self.is_loaded then
  108. self.need_refresh_evt_time = false
  109. self:UpdateView()
  110. self:UpdateEventTime()
  111. self:UpdateRedDot()
  112. else
  113. self.need_refresh_evt_time = true
  114. end
  115. end
  116. -- 获取本服团战开发时间(通用那边读的是日常的时间,所以要重写)
  117. function GuildEventWarView:GetGuildEventOpenTime( evt_time_data)
  118. local time = false
  119. local key = self.evt_time_data.module_id .. "@" .. self.evt_time_data.module_sub .. "@" .. self.evt_time_data.ac_sub
  120. local cfg = Config.Ac[key]
  121. if cfg then
  122. local weekList = DailyModel.getInstance():GetParseList(cfg.week)
  123. local time_region = stringtotable(cfg.time_region)
  124. local week_time = ""
  125. if #weekList == 7 or #weekList == 0 then
  126. week_time = "每周"
  127. else
  128. for i,v in ipairs(weekList) do
  129. if week_time == "" then
  130. week_time = "" .. TimeUtil:GetWeekStrNum(tonumber(v))
  131. else
  132. week_time = week_time .. "" .. TimeUtil:GetWeekStrNum(tonumber(v))
  133. end
  134. end
  135. end
  136. local start_time
  137. local end_time
  138. if time_region and time_region[1] and time_region[1][1] and time_region[1][2] then
  139. local t1 = time_region[1][1]
  140. local t2 = time_region[1][2]
  141. start_time = t1[1] .. ":" .. t1[2]
  142. end_time = t2[1] .. ":" .. t2[2]
  143. else
  144. return false
  145. end
  146. time = week_time .. " <color=#2CF86F>" .. start_time .."-"..end_time.."</color>,限时开启"
  147. end
  148. return time
  149. end
  150. -- 设置活动的开始时间
  151. function GuildEventWarView:UpdateEventTime( )
  152. self.event_time_tmp.text = self:GetGuildEventOpenTime() or self.model:GetGuildEventOpenTime(self.evt_time_data.module_id, self.evt_time_data.module_sub, self.evt_time_data.ac_sub)
  153. end
  154. function GuildEventWarView:UpdateRewardItem( )
  155. local reward_data = DailyModel.Instance:GetRewardList(405,1,1)
  156. self.reward_item_creator = self.reward_item_creator or self:AddUIComponent(UI.ItemListCreator)
  157. local info = {
  158. data_list = reward_data,
  159. item_con = self.reward_con,
  160. scroll_view = self.reward_scroll,
  161. obj_pool_type = UIObjPool.UIType.AwardItem,
  162. item_width = 88,
  163. item_height = 88,
  164. space_x = 9,
  165. create_frequency = 0.01,
  166. alignment = UnityEngine.TextAnchor.UpperLeft,
  167. on_update_item = function(item, i, v)
  168. local goods_Id, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
  169. local goodVo = GoodsModel:getInstance():GetGoodsBasicByTypeId(goods_Id)
  170. if goodVo then
  171. item:SetData(goodVo.type_id, v.count , goodVo.color, nil, lock)
  172. end
  173. end,
  174. }
  175. self.reward_item_creator:UpdateItems(info)
  176. end
  177. function GuildEventWarView:UpdateRedDot( )
  178. -- self.reddot_obj:SetActive(self.model:GetGuildEventTabRed("405@1"))
  179. -- 2021.3.23 优化需求:社团活动页签不再给红点
  180. self.reddot_obj:SetActive(false)
  181. end
  182. function GuildEventWarView:__delete( )
  183. if self.vipItem then
  184. self.vipItem:DeleteMe()
  185. self.vipItem = nil
  186. end
  187. end
  188. function GuildEventWarView:RequestInfo( )
  189. if not self.is_request then
  190. self.is_request = true
  191. self.model:Fire(GuildModel.REQUEST_CCMD_EVENT,40509)
  192. end
  193. end
  194. function GuildEventWarView:UpdateLastMvp( )
  195. local d = self.model.guild_war_info.last_mvp
  196. if d and Trim(d.name) ~= "" then
  197. self.leader_text_tmp.text = Trim(d.name)
  198. self.guild_text_tmp.text = Trim(d.guild_name)
  199. if not self.vipItem then
  200. self.vipItem = RoleVipItem.New(self.vip_img.transform)
  201. end
  202. self.vipItem:SetData(d.vip_flag,d.sup_vip_type)
  203. if d.vip_flag ~= 0 then
  204. SetAnchoredPositionX(self.leader_text.transform, 253)
  205. else
  206. SetAnchoredPositionX(self.leader_text.transform, 226)
  207. end
  208. else
  209. self.leader_text_tmp.text = "虚位以待"
  210. self.guild_text_tmp.text = "虚位以待"
  211. SetAnchoredPositionX(self.leader_text.transform, 226)
  212. end
  213. end
  214. function GuildEventWarView:SetSelectServerGroup(show)
  215. if show then
  216. local d = self.model.guild_war_info.max_pool
  217. if not d or #d == 0 then
  218. return
  219. end
  220. local data_list = self.model.guild_war_info.max_pool
  221. self.server_group_obj:SetActive(true)
  222. SetLocalScale(self.cur_server_select_tips, 1, -1, 1)
  223. local item_size = #data_list <= GuildEventWarView.POOL_MAX_SHOW and #data_list or GuildEventWarView.POOL_MAX_SHOW
  224. SetSizeDeltaY(self.server_scroll, 37 *item_size)
  225. SetSizeDeltaY(self.serber_bg, 5 + 37 * item_size)
  226. self.server_list_creator = self.server_list_creator or self:AddUIComponent(UI.ItemListCreator)
  227. local info = {
  228. data_list = data_list,
  229. item_con = self.server_con,
  230. scroll_view = self.server_scroll,
  231. item_class = GuildEventWarItem,
  232. item_width = 225,
  233. item_height = 37,
  234. start_x = 111,
  235. start_y = -20,
  236. space_x = 0,
  237. space_y = 0,
  238. create_frequency = 0.01,
  239. show_col = 1,
  240. is_enable = #data_list > GuildEventWarView.POOL_MAX_SHOW,
  241. alignment = UnityEngine.TextAnchor.UpperLeft,
  242. on_update_item = function(item, i, v)
  243. local function call_back(pool_id)
  244. self:SetSelectServerGroup(false)
  245. self:SelectServer(pool_id)
  246. end
  247. item:SetData(v, i)
  248. item:SetCallBack(call_back)
  249. end,
  250. }
  251. self.server_list_creator:UpdateItems(info)
  252. else
  253. self.server_group_obj:SetActive(false)
  254. SetLocalScale(self.cur_server_select_tips, 1, 1, 1)
  255. end
  256. end
  257. function GuildEventWarView:SelectServer(pool_id)
  258. local d = self.model.guild_war_info.max_pool
  259. if not d or #d == 0 then
  260. self.cur_server_name_tmp.text = "本服战区"
  261. lua_resM:setImageSprite(self, self.cur_server_wifi_img, "guild_asset", "guild_event_war_item_wifi_1", true)
  262. return
  263. end
  264. local info = false
  265. for i,v in ipairs(d) do
  266. if v.pool_id == pool_id or not pool_id then
  267. info = v
  268. break
  269. end
  270. end
  271. if not info then
  272. return
  273. end
  274. self.select_pool_id = info.pool_id
  275. self.cur_server_name_tmp.text = string.format("本服%d区", info.pool_id)
  276. local res = "guild_event_war_item_wifi_4"
  277. for i,v in ipairs(GuildEventWarView.WIFE) do
  278. if info.num >= v.min and info.num <= v.max then
  279. res = v.res
  280. break
  281. end
  282. end
  283. lua_resM:setImageSprite(self, self.cur_server_wifi_img, "guild_asset", res, true)
  284. end