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

4203 行
146 KiB

  1. GuildModel = GuildModel or BaseClass(BaseModel)
  2. -- 旧协议,但是还有用的
  3. GuildModel.REQUEST_CCMD_EVENT = "GuildModel.REQUEST_CCMD_EVENT" -- 请求社团协议事件
  4. GuildModel.UPDATE_RED_DOT_BY_TYPE = "GuildModel.UPDATE_RED_DOT_BY_TYPE" -- 刷新社团系统全局红点(根据界面类型)
  5. GuildModel.RequestGuildListEvt = "GuildModel.RequestGuildListEvt" --请求社团列表事件
  6. GuildModel.RefreshGuildListEvt = "GuildModel.RefreshGuildListEvt" --刷新社团列表事件
  7. GuildModel.ApplyJoinGuildEvt = "GuildModel.ApplyJoinGuildEvt" --申请加入社团
  8. GuildModel.RequestMultiJoinGuildEvt = "GuildModel.RequestMultiJoinGuildEvt" --请求海投简历
  9. GuildModel.RequestCreateGuildEvt = "GuildModel.RequestCreateGuildEvt" --请求创建社团
  10. GuildModel.RequestGuildBaseInfoEvt = "GuildModel.RequestGuildBaseInfoEvt" --请求社团基础信息
  11. GuildModel.RefreshGuildInfoEvt = "GuildModel.RefreshGuildInfoEvt" --刷新社团主页基础信息
  12. GuildModel.RefreshMainViewMemberInfoEvt = "GuildModel.RefreshMainViewMemberInfoEvt" --刷新社团主界面请求成员信息
  13. GuildModel.RequestMemberViewMemberInfoEvt = "GuildModel.RequestMemberViewMemberInfoEvt" --请求成员界面成员信息
  14. GuildModel.RefreshMemberApplyListEvt = "GuildModel.RefreshMemberApplyListEvt" --刷新成员申请信息
  15. GuildModel.RequestQuitGuildEvt = "GuildModel.RequestQuitGuildEvt" --请求退出社团
  16. GuildModel.RequestSetApplyMemberStateEvt = "GuildModel.RequestSetApplyMemberStateEvt" --请求设置玩家的申请状态
  17. GuildModel.RefreshtSetApplyMemberStateEvt = "GuildModel.RefreshtSetApplyMemberStateEvt" --更新设置玩家的申请状态
  18. GuildModel.RefreshApplySettingViewStateEvt = "GuildModel.RefreshApplySettingViewStateEvt" --刷新申请设置界面的状态
  19. GuildModel.RequestApplySettingConditionEvt = "GuildModel.RequestApplySettingConditionEvt" --请求申请设置界面条件
  20. GuildModel.RequestSetAnnounceEvt = "GuildModel.RequestSetAnnounceEvt" --请求设置公告
  21. GuildModel.RefreshGuildAnnounceEvt = "GuildModel.RefreshGuildAnnounceEvt" --刷新主界面公告
  22. GuildModel.RequestAgreeApplyListEvt = "GuildModel.RequestAgreeApplyListEvt" --同意申请列表
  23. GuildModel.RefreshPostNumEvt = "GuildModel.RefreshPostNumEvt" --刷新职位数量
  24. GuildModel.RequestAppointMemberPostEvt = "GuildModel.RequestAppointMemberPostEvt" --任命职位
  25. GuildModel.RequestKickOutGuildEvt = "GuildModel.RequestKickOutGuildEvt" --请求踢出社团
  26. GuildModel.RefreshKickOutGuildEvt = "GuildModel.RefreshKickOutGuildEvt" --刷新踢出社团
  27. GuildModel.RefreshPermissionListEvt = "GuildModel.RefreshPermissionListEvt" --刷新玩家权限列表
  28. GuildModel.UPDATE_GOODS_LIST = "GuildModel.UPDATE_GOODS_LIST" --刷新社团商店列表信息
  29. GuildModel.RefreshBuyGoodsItemEvt = "GuildModel.RefreshBuyGoodsItemEvt" --更新购买goodsitem数量信息事件
  30. GuildModel.UPDATE_GUILDACTIVE_RANK_DATA = "GuildModel.UPDATE_GUILDACTIVE_RANK_DATA" -- 从排行榜模块获取活跃度社团排行信息
  31. GuildModel.OPEN_GUILD_EVENT_VIEW = "GuildModel.OPEN_GUILD_EVENT_VIEW" --跳转到指定活动界面
  32. GuildModel.AFTER_GET_HISTORY_GUILD_COUNT = "GuildModel.AFTER_GET_HISTORY_GUILD_COUNT" --查询社团历史最大数量后
  33. --本服团战
  34. GuildModel.OPEN_GUILD_WAR_SCENE_VIEW = "GuildModel.OPEN_GUILD_WAR_SCENE_VIEW" --本服团战场景界面
  35. GuildModel.OPEN_GUILD_WAR_RANK_VIEW = "GuildModel.OPEN_GUILD_WAR_RANK_VIEW" --本服团战场排行
  36. GuildModel.ENTER_GUILD_WAR_SCENE = "GuildModel.ENTER_GUILD_WAR_SCENE" --进入本服团战场景
  37. GuildModel.LEAVE_GUILD_WAR_SCENE = "GuildModel.LEAVE_GUILD_WAR_SCENE" --离开本服团战场景
  38. GuildModel.GUILD_WAR_LAST_MVP = "GuildModel.GUILD_WAR_LAST_MVP" --上期明星团长
  39. GuildModel.GUILD_WAR_RANK_LIST = "GuildModel.GUILD_WAR_RANK_LIST" --本服团战排行数据
  40. GuildModel.GUILD_WAR_RESULT = "GuildModel.GUILD_WAR_RESULT" --大战结果
  41. GuildModel.GUILD_WAR_UPDATE_SCROE = "GuildModel.GUILD_WAR_UPDATE_SCROE" --大战积分刷新
  42. GuildModel.GUILD_WAR_BASE_INFO = "GuildModel.GUILD_WAR_BASE_INFO" --大战基本信息
  43. GuildModel.GUILD_WAR_PICK_STATE = "GuildModel.GUILD_WAR_PICK_STATE" --采集状态变化
  44. GuildModel.GUILD_WAR_BOSS_BORN = "GuildModel.GUILD_WAR_BOSS_BORN" --boss出生
  45. GuildModel.GUILD_WAR_BOSS_DIE = "GuildModel.GUILD_WAR_BOSS_DIE" --boss死亡
  46. GuildModel.GUILD_WAR_OPEN_STATE = "GuildModel.GUILD_WAR_OPEN_STATE" --开放情况
  47. GuildModel.GUILD_WAR_START_COLLECT = "GuildModel.GUILD_WAR_START_COLLECT" --开始采集
  48. GuildModel.GUILD_WAR_PROJECT = "GuildModel.GUILD_WAR_PROJECT" --护盾
  49. GuildModel.OPEN_SELECT_SERVER = "GuildModel.OPEN_SELECT_SERVER" --战区选择
  50. GuildModel.OPEN_ACTIVE_OPEN_TIPS_VIEW = "GuildModel.OPEN_ACTIVE_OPEN_TIPS_VIEW" --打开战场开启界面
  51. GuildModel.SHOW_ACTIVE_OPEN_TIPS_RED = "GuildModel.SHOW_ACTIVE_OPEN_TIPS_RED" --显示战场开启红点
  52. -- 社团驻地和社团活动协议相关
  53. GuildModel.ENTER_GUILD_BASE = "GuildModel.ENTER_GUILD_BASE" --前往社团驻地
  54. GuildModel.LEAVE_GUILD_BASE = "GuildModel.LEAVE_GUILD_BASE" --离开社团驻地
  55. GuildModel.UPDATE_GUILD_EVENT_BY_TYPE = "GuildModel.UPDATE_GUILD_EVENT_BY_TYPE" --根据类型更新社团活动数据
  56. GuildModel.UPDATE_GUILD_COLLECT_LEFT_TIME = "GuildModel.UPDATE_GUILD_COLLECT_LEFT_TIME" -- 刷新采集活动倒计时
  57. GuildModel.UPDATE_GUILD_COLLECT_INFO_CON = "GuildModel.UPDATE_GUILD_COLLECT_INFO_CON" -- 刷新采集活动右上角信息栏
  58. GuildModel.UODATE_GUILD_COLLECT_ACTIVITY_TIMES = "GuildModel.UODATE_GUILD_COLLECT_ACTIVITY_TIMES" -- 刷新活动界面的采集参加次数
  59. GuildModel.UPDATE_GUILD_COLLECT_LEFT_COLLECT_MON_NUM = "GuildModel.UPDATE_GUILD_COLLECT_LEFT_COLLECT_MON_NUM"--刷新当前剩余的采集怪数量
  60. GuildModel.OPEN_GUILD_COLLECT_REWARD_VIEW = "GuildModel.OPEN_GUILD_COLLECT_REWARD_VIEW"--打开封印裂隙奖励说明界面
  61. GuildModel.ANS_GUILD_COLLECT_HELP_LIST = "GuildModel.ANS_GUILD_COLLECT_HELP_LIST"--刷新封印裂隙协助信息
  62. GuildModel.CHANGE_GUILD_COLLECT_LEFT_CON_STATE = "GuildModel.CHANGE_GUILD_COLLECT_LEFT_CON_STATE"--切换封印裂隙左上角
  63. GuildModel.FIND_WAY_TO_GUILD_COLLECT_HELP_MON = "GuildModel.FIND_WAY_TO_GUILD_COLLECT_HELP_MON"--寻路去杀协助的入侵怪
  64. GuildModel.AUTO_FIND_WAY_TO_GUILD_COLLECT_MON = "GuildModel.AUTO_FIND_WAY_TO_GUILD_COLLECT_MON"--自动寻路去采集最近的裂隙
  65. GuildModel.UPDATE_AUTO_GUILD_COLLECT_STATE = "GuildModel.UPDATE_AUTO_GUILD_COLLECT_STATE"--更新自动采集状态
  66. GuildModel.GUILD_COLLECT_SUPPORT_CANCEL = "GuildModel.GUILD_COLLECT_SUPPORT_CANCEL"--封印裂隙取消事件
  67. GuildModel.UPDATE_GUILD_COLLECT_SUPPORT_INFO_LIST = "UPDATE_GUILD_COLLECT_SUPPORT_INFO_LIST"--封印裂隙协助列表刷新
  68. GuildModel.UPDATE_GUILD_COLLECT_NOW_SUPPORT_ID = "GuildModel.UPDATE_GUILD_COLLECT_NOW_SUPPORT_ID"--刷新当前的封印裂隙协助id
  69. GuildModel.UPDATE_GUILD_BOSS_RANK = "GuildModel.UPDATE_GUILD_BOSS_RANK" -- 更新社团boss输出排行
  70. GuildModel.UPDATE_GUILD_BOSS_PERSONAL_RANK = "GuildModel.UPDATE_GUILD_BOSS_PERSONAL_RANK" -- 更新社团boss个人输出信息
  71. GuildModel.UPDATE_GUILDBOSS_INVINCIBLE = "GuildModel.UPDATE_GUILDBOSS_INVINCIBLE" -- 更新社团boss狂暴信息
  72. GuildModel.UPDATE_GUILDPARTY_EXPDATA = "GuildModel.UPDATE_GUILDPARTY_EXPDATA" -- 更新社团派对经验信息
  73. -- GuildModel.CHANGE_GUILDDANCE_ACTION = "GuildModel.CHANGE_GUILDDANCE_ACTION" -- 切换社团祝火跳舞动作
  74. GuildModel.UPDATE_GUILD_ANNOUNCE_TIMES = "GuildModel.UPDATE_GUILD_ANNOUNCE_TIMES" -- 更新社团公告修改次数信息
  75. GuildModel.UPDATE_GUILD_SCENE_MEMBER_NUM = "GuildModel.UPDATE_GUILD_SCENE_MEMBER_NUM" -- 社团驻地内人数协议
  76. -- 社团界面相关逻辑
  77. GuildModel.OPEN_GUILD_EDITOR_ANNOUNCE_VIEW = "GuildModel.OPEN_GUILD_EDITOR_ANNOUNCE_VIEW" -- 打开编辑社团公告界面
  78. GuildModel.OPEN_POSITION_APPLY_VIEW = "GuildModel.OPEN_POSITION_APPLY_VIEW" -- 打开社团合并界面
  79. GuildModel.UPDATE_MEMBER_VIEW_RED = "GuildModel.UPDATE_MEMBER_VIEW_RED" -- 刷新社团成员管理界面红点
  80. GuildModel.UPDATE_ROLE_ACTIVE_DATA = "GuildModel.UPDATE_ROLE_ACTIVE_DATA" -- 更新社团个人活跃数据
  81. GuildModel.UPDATE_GUILD_TASK_PROGRESS = "GuildModel.UPDATE_GUILD_TASK_PROGRESS" -- 更新社团活跃任务数据
  82. GuildModel.UPDATE_GUILD_ACTIVE_DATA = "GuildModel.UPDATE_GUILD_ACTIVE_DATA" -- 更新社团周活跃数据
  83. GuildModel.UPDATE_GUILD_ACTIVE_REWARD = "GuildModel.UPDATE_GUILD_ACTIVE_REWARD" -- 更新社团活跃奖励领取
  84. GuildModel.UPDATE_ACTIVE_RED = "GuildModel.UPDATE_ACTIVE_RED" -- 刷新社团活跃奖励红点
  85. GuildModel.OPEN_GUILD_LOG_VIEW = "GuildModel.OPEN_GUILD_LOG_VIEW" -- 打开社团合并界面
  86. GuildModel.UPDATE_GUILD_LOG = "GuildModel.UPDATE_GUILD_LOG" -- 更新社团日志
  87. GuildModel.UPDATE_GUILD_MERGE_INFO = "GuildModel.UPDATE_GUILD_MERGE_INFO" -- 更新社团合并信息
  88. GuildModel.OPEN_GUILD_BOSS_VIEW = "GuildModel.OPEN_GUILD_BOSS_VIEW" -- 打开社团午间boss活动界面
  89. GuildModel.OPEN_GUILD_SUPPORT_IFNO_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_IFNO_VIEW" -- 打开社团协助信息界面
  90. GuildModel.CLOSE_GUILD_SUPPORT_IFNO_VIEW = "GuildModel.CLOSE_GUILD_SUPPORT_IFNO_VIEW" --关闭协助信息界面
  91. GuildModel.OPEN_GUILD_SUPPORT_THANK_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_THANK_VIEW" -- 打开社团协助感谢界面
  92. GuildModel.SHOW_GUILD_SUPPORT_THANK_BTN = "GuildModel.SHOW_GUILD_SUPPORT_THANK_BTN" --展示社团协助按钮
  93. GuildModel.UPDATE_GUILD_SUPPOR_INFO = "GuildModel.UPDATE_GUILD_SUPPOR_INFO"--更新社团协助信息
  94. GuildModel.BOARD_GUILD_SUPPOR_REMOVE = "GuildModel.BOARD_GUILD_SUPPOR_REMOVE"--社团协助成员取消协助
  95. GuildModel.UPDATE_GUILD_SUPPOR_THANK_INFO = "GuildModel.UPDATE_GUILD_SUPPOR_THANK_INFO"--更新社团协助感谢信息
  96. GuildModel.UPDATE_GUILD_SUPPOR_THANK_DESC = "GuildModel.UPDATE_GUILD_SUPPOR_THANK_DESC"--更新社团协助感谢说明
  97. GuildModel.OPEN_GUILD_SUPPORT_GO_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_GO_VIEW"--打开社团协助前往界面
  98. GuildModel.OPEN_GUILD_SUPPORT_RESULT_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_RESULT_VIEW"--打开社团协助结算界面
  99. GuildModel.UPDATE_SUPPORT_THANK_LIST = "GuildModel.UPDATE_SUPPORT_THANK_LIST"--更新协助感谢列表
  100. GuildModel.UPDATE_SUPPORT_GIFT_LIST = "GuildModel.UPDATE_SUPPORT_GIFT_LIST"--更新协助感谢领奖列表
  101. GuildModel.OPEN_GUILD_SUPPORT_TIP_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_TIP_VIEW"--快捷发送界面
  102. GuildModel.CLOSE_GUILD_SUPPORT_TIP_VIEW = "GuildModel.CLOSE_GUILD_SUPPORT_TIP_VIEW"--关闭快捷发送界面
  103. GuildModel.OPEN_GUILD_SUPPORT_ACCEPT_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_ACCEPT_VIEW"--打开社团协助任务获取界面
  104. GuildModel.OPEN_GUILD_SUPPORT_GUILD_BOSS_GO_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_GUILD_BOSS_GO_VIEW"--打开社团协助BOSS前往界面
  105. GuildModel.OPEN_REQUEST_MERGE_VIEW = "GuildModel.OPEN_REQUEST_MERGE_VIEW" -- 打开社团合并发起界面
  106. GuildModel.OPEN_GUILD_BOSS_RESULT_VIEW = "GuildModel.OPEN_GUILD_BOSS_RESULT_VIEW" -- 打开社团boss结算界面
  107. GuildModel.OPEN_GUILD_POS_ALLOT_VIEW = "GuildModel.OPEN_GUILD_POS_ALLOT_VIEW" -- 打开社团职位任命界面
  108. GuildModel.OPEN_GUILD_APPLY_MGR_VIEW = "GuildModel.OPEN_GUILD_APPLY_MGR_VIEW" -- 打开社团申请管理界面
  109. GuildModel.OPEN_GUILD_RENAME_VIEW = "GuildModel.OPEN_GUILD_RENAME_VIEW" -- 打开改名该标志界面
  110. ---- 拼单新事件
  111. GuildModel.UPDATE_GUILD_SL_DATA = "GuildModel.UPDATE_GUILD_SL_DATA" -- 更新拼单数据
  112. GuildModel.UPDATE_SELECTED_GUILD_SL_DATA = "GuildModel.UPDATE_SELECTED_GUILD_SL_DATA" -- 更新当前选中拼单数据
  113. GuildModel.OPEN_GUILD_SL_REWARD_VIEW = "GuildModel.OPEN_GUILD_SL_REWARD_VIEW" -- 打开社团拼单奖励界面
  114. GuildModel.OPEN_GUILD_SL_THANK_VIEW = "GuildModel.OPEN_GUILD_SL_THANK_VIEW" -- 打开社团拼单感谢界面
  115. ----
  116. GuildModel.PICK_UP_BOSS_DROP_ITEM = "GuildModel.PICK_UP_BOSS_DROP_ITEM" -- 发送社团boss采集协议
  117. GuildModel.UPDATE_GUILD_BOSS_INFO = "GuildModel.UPDATE_GUILD_BOSS_INFO" -- 更新社团boss状态(社团boss掉落专用)
  118. GuildModel.START_TO_COLLECT_ITEM = "GuildModel.START_TO_COLLECT_ITEM" -- 社团boss开始采集
  119. GuildModel.STOP_COLLECT_ITEM = "GuildModel.STOP_COLLECT_ITEM" -- 社团boss中断采集
  120. GuildModel.PICK_SCENE_DROP_ITEM = "GuildModel.PICK_SCENE_DROP_ITEM" -- 社团boss采集成功
  121. GuildModel.GUILD_BOSS_DROP_EVENT = "GuildModel.GUILD_BOSS_DROP_EVENT" -- 社团boss掉落事件
  122. GuildModel.OPEN_BOSS_ROLL_VIEW = "GuildModel.OPEN_BOSS_ROLL_VIEW" -- 打开社团bossroll点界面
  123. GuildModel.UPDATE_BOSS_ROLL_DATA = "GuildModel.UPDATE_BOSS_ROLL_DATA" -- 更新社团bossroll点界面
  124. GuildModel.UPDATE_BOSS_ROLL_RECORD = "GuildModel.UPDATE_BOSS_ROLL_RECORD" -- 更新社团bossroll点记录
  125. GuildModel.UPDATE_GUILD_BOSS_HIGHEST_DATA = "GuildModel.UPDATE_GUILD_BOSS_HIGHEST_DATA" -- 更新社团bossroll点最高记录
  126. GuildModel.UPDATE_SCENE_FUNCBTN_NUM_RED = "GuildModel.UPDATE_SCENE_FUNCBTN_NUM_RED" -- 更新场景功能按钮的次数红点
  127. GuildModel.OPEN_BOSS_ROLL_PREVIEW_VIEW = "GuildModel.OPEN_BOSS_ROLL_PREVIEW_VIEW" -- 打开社团boss奖励预览界面
  128. GuildModel.OPEN_CSGR_SCENE_VIEW = "GuildModel.OPEN_CSGR_SCENE_VIEW" -- 打开本国团战活动场景界面
  129. GuildModel.OPEN_CSGR_REWARD_VIEW = "GuildModel.OPEN_CSGR_REWARD_VIEW" -- 打开本国团战奖励预览界面
  130. GuildModel.OPEN_CSGR_RANK_VIEW = "GuildModel.OPEN_CSGR_RANK_VIEW" -- 打开本国团战伤害排行界面
  131. GuildModel.OPEN_CSGR_FIGHTINFO_VIEW = "GuildModel.OPEN_CSGR_FIGHTINFO_VIEW" -- 打开本国团战对战信息界面
  132. GuildModel.UPDATE_CSGR_FIGHTINFO = "GuildModel.UPDATE_CSGR_FIGHTINFO" -- 更新本国团战对战信息
  133. GuildModel.UPDATE_CSGR_COLLECTBUFF = "GuildModel.UPDATE_CSGR_COLLECTBUFF" -- 更新本国团战采集buff信息
  134. GuildModel.UPDATE_CSGR_BF_RES = "GuildModel.UPDATE_CSGR_BF_RES" -- 更新本国团战战场资源信息
  135. GuildModel.UPDATE_CSGR_DMG_RANK = "GuildModel.UPDATE_CSGR_DMG_RANK" -- 更新本国团战输出排行(二级界面)
  136. GuildModel.UPDATE_CSGR_SCENE_DMG_RANK = "GuildModel.UPDATE_CSGR_SCENE_DMG_RANK" -- 更新本国团战输出排行(活动场景内)
  137. GuildModel.OPEN_CSGR_RESULT_VIEW = "GuildModel.OPEN_CSGR_RESULT_VIEW" -- 打开本国团战结算界面
  138. GuildModel.UPDATE_CSGR_BOSS_HP = "GuildModel.UPDATE_CSGR_BOSS_HP" -- 本国团战boss血条推送
  139. -- 社团跑环答题
  140. GuildModel.UPDATE_QUIZ_VIEW_ANSWERING = "GuildModel.UPDATE_QUIZ_VIEW_ANSWERING" -- 更新题目
  141. GuildModel.UPDATE_QUIZ_VIEW_SHOWING = "GuildModel.UPDATE_QUIZ_VIEW_SHOWING" -- 更新答案展示
  142. GuildModel.OPEN_GUILD_QUIZ_VIEW = "GuildModel.OPEN_GUILD_QUIZ_VIEW" -- 打开答题界面
  143. GuildModel.OPEN_GUILD_QUIZ_RESULT_VIEW = "GuildModel.OPEN_GUILD_QUIZ_RESULT_VIEW" -- 打开答题界面
  144. GuildModel.GUILD_QUIZ_FINISH = "GuildModel.GUILD_QUIZ_FINISH" -- 答题结束了
  145. GuildModel.UPDATE_SUPPORT_GUILD_INFO = "GuildModel.UPDATE_SUPPORT_GUILD_INFO" -- 虚空副本信息
  146. --------------------------------------------------
  147. -- 社团职位id GuildModel.GuildPosition.Leader
  148. GuildModel.GuildPosition = {
  149. Leader = 1, --会长
  150. ViceLeader = 2,--副会长
  151. Elite = 3, --战斗精英
  152. Teasure = 4, --活宝
  153. Normal = 5, --成员
  154. Agency = 6, --代理社长
  155. -- EnterGuild = 66, --进入社团
  156. }
  157. -- 社团管理权限 GuildModel.MgrPermission.ChangeAnnounce
  158. GuildModel.MgrPermission = {
  159. PassJoinApply = 1, -- 通过加入申请
  160. PassPosApply = 2, -- 通过职位申请
  161. KickMember = 3, -- 剔除社团成员
  162. ChangeAnnounce = 4, -- 修改社团公告
  163. ChangeApplySetting = 5, -- 修改社团申请设置
  164. ChangeName = 6, -- 社团改名
  165. MergeGuild = 7, -- 社团合并
  166. }
  167. -- 社团日志类型 GuildModel.LogType.Join
  168. GuildModel.LogType = {
  169. Join = 1, -- 1.玩家加入
  170. Active = 2, -- 2.玩家活跃记录
  171. Position = 3, -- 3.职位变更
  172. Upgrade = 4, -- 4.社团升级
  173. }
  174. -- 社团日志模板
  175. GuildModel.LogStr = {
  176. [GuildModel.LogType.Join] = "欢迎 <color=#2cf86f>@name</color> 玩家加入本社团,与大家一起建设社团大家庭",
  177. [GuildModel.LogType.Active] = "<color=#2cf86f>@name</color> 为社团贡献了 <color=#2cf86f>@active</color> 点活跃值,为社团成长添砖加瓦!",
  178. [GuildModel.LogType.Position] = "社团成员 <color=#2cf86f>@name</color> 玩家职位变更为 <color=#fdffc2>@pos</color> ,以更好地为社团贡献自己的力量",
  179. [GuildModel.LogType.Upgrade] = "本社团等级提升至 <color=#2cf86f>@upgrade级</color> ,大家的努力有了成效,这一刻的荣耀属于每一个人!",
  180. }
  181. -- 社团商城购买类型 GuildModel.ShopBuyType.NoLimit
  182. GuildModel.ShopBuyType = {
  183. NoLimit = 0, -- 不限购
  184. DayLimit = 1, -- 日限购
  185. WeekLimit = 2, -- 周限购
  186. RoleLimit = 3, -- 终生限购
  187. }
  188. ---------------------------------------------------------
  189. GuildModel.EXP_GOODS_ID = 38040201
  190. GuildModel.GuildContributeId = 100004 -- 社团贡献道具id
  191. GuildModel.GuildContributeType = 8 -- 社团贡献道具货币类型
  192. --协助状态
  193. GuildModel.SupportType = {
  194. Thank = 1, -- 感谢
  195. Award = 2, -- 领奖
  196. }
  197. GuildModel.SupportTab = {
  198. List = 1, -- 列表界面
  199. Thank = 2, -- 感谢列表
  200. Gift = 3, -- 收下感谢
  201. }
  202. -- 社团拼单文字说明
  203. GuildModel.SupportTypeStr = {
  204. [1] = "协助击杀",
  205. [2] = "协助击杀",
  206. [3] = "协助完成",
  207. [4] = "协助击杀",
  208. [5] = "协助",
  209. [6] = "协助",
  210. }
  211. GuildModel.SpellListColor = {
  212. [1] = "#66abff",
  213. [2] = "#f558ff",
  214. [3] = "#feb940",
  215. }
  216. -- 需要展示在【活动】界面的【限时活动】都需要配置键值在这里,值为界面节点名称
  217. GuildModel.EventModuleId = {
  218. ["406@1"] = "GuildEventBossView", -- 社团午间boss
  219. ["406@2"] = "GuildEventBossView", -- 社团晚间boss
  220. ["408@0"] = "GuildEventCollectView", -- 社团午间采集
  221. ["400@7"] = "GuildEventPartyView", -- 社团派对
  222. ["405@1"] = "GuildEventWarView", -- 本服团战
  223. ["410@1"] = "GuildEventCSGuildRankView", -- 本国团战
  224. ["410@2"] = "GuildEventCSGuildRankView", -- 本国团战
  225. }
  226. -- EventView的页签加载图片
  227. GuildModel.EventTabRes = {
  228. ["406@1"] = "guild_event_406_1_pointfilter", -- 社团午间boss
  229. ["406@2"] = "guild_event_406_1_pointfilter", -- 社团晚间boss
  230. ["408@0"] = "guild_event_408_0_pointfilter", -- 社团午间采集
  231. ["400@7"] = "guild_event_400_7_pointfilter", -- 社团派对
  232. ["405@1"] = "guild_event_405_1_pointfilter", -- 本服团战
  233. ["410@1"] = "guild_event_410_1_pointfilter", -- 本国团战
  234. ["410@2"] = "guild_event_410_2_pointfilter", -- 本国团战
  235. }
  236. -- 社团活动玩法类型(前端用)
  237. GuildEventType = {
  238. NoonCollect = 4080, -- 午间采集
  239. GuildBossNoon = 4061,
  240. GuildBossNight = 4062,
  241. GuildParty = 4007, -- 社团派对
  242. GuildTV = 1420, -- 跑马
  243. GuildWar = 4051, -- 跑马
  244. GuildCSGR = 410, -- 本国团战
  245. }
  246. -- 社团活动玩法可预告玩法类型,值为按钮图标资源
  247. GuildTrailerEventType = {
  248. [GuildEventType.GuildBossNoon] = "icon_406_0",
  249. [GuildEventType.GuildBossNight] = "icon_406_0",
  250. [GuildEventType.NoonCollect] = "icon_408_0",
  251. [GuildEventType.GuildParty] = "icon_400_7",
  252. -- [GuildEventType.GuildWar] = "icon_405_1",
  253. -- [GuildEventType.GuildCSGR] = "icon_rightTop_410",
  254. }
  255. -- 社团午间/晚间boss排行类型
  256. GuildBossRankType = {
  257. Personal = 0,
  258. Guild = 1,
  259. }
  260. -- 社团活动中允许多个时间段存在的活动
  261. GuildModel.AllowRepeatEvent = {
  262. [406] = true,
  263. [408] = true,
  264. }
  265. GuildModel.GuildBossId = 651001 -- 社团bossid
  266. GuildModel.GuildCollectMonId = 650001 -- 封印裂隙怪物id
  267. GuildModel.GuildCollectModuleId = 408 --社团采集对应模块id
  268. GuildModel.FEAST_MONSTER_INSTANCE_ID = 1 -- 社团派对中间客户端怪物id
  269. GuildModel.GuildPowerRankType = 407 -- 社团合并界面的排行请求类型
  270. GuildModel.GuildActiveRankType = 4002 -- 社团合并界面的排行请求类型
  271. -- 社团协助感谢言语
  272. GuildModel.ThankDesc = {
  273. [1] = "请大佬喝阔乐",
  274. [2] = "给大佬递茶",
  275. [3] = "一键三连",
  276. [4] = "送大佬一个火箭",
  277. }
  278. -- 社团权限描述
  279. GuildModel.PermissionStr = {
  280. [GuildModel.MgrPermission.PassJoinApply] = "审批入团申请",
  281. [GuildModel.MgrPermission.PassPosApply] = "审批职位申请",
  282. [GuildModel.MgrPermission.KickMember] = "踢出团员",
  283. [GuildModel.MgrPermission.ChangeAnnounce] = "修改社团宣言",
  284. [GuildModel.MgrPermission.ChangeApplySetting] = "修改社团申请设置",
  285. [GuildModel.MgrPermission.ChangeName] = "修改社团名称",
  286. [GuildModel.MgrPermission.MergeGuild] = "管理社团合并",
  287. }
  288. -- 社团职位申请节点的职位描述
  289. GuildModel.PosApplyDesc = {
  290. [GuildModel.GuildPosition.ViceLeader] =
  291. {
  292. "审批入团申请",
  293. "审批职位申请",
  294. "踢出团员",
  295. "修改社团公告",
  296. "修改社团申请设置",
  297. },
  298. [GuildModel.GuildPosition.Elite] = {"该职务暂无权限"},
  299. [GuildModel.GuildPosition.Teasure] = {"该职务暂无权限"},
  300. }
  301. -- 社团boss采集操作类型
  302. GuildModel.GBossPickOpty = {
  303. Start = 0,
  304. Succeed = 1,
  305. Cancel = 2,
  306. }
  307. -- 本服团战 寻找目标
  308. GuildModel.GuildWarTarget = {
  309. Boss = 653001, --boss
  310. SmallRice = 653002, --粗粮
  311. BigRice = 653003, --精粮
  312. MiddleRice = 653004, --中粮
  313. Npc = 99999999, --npc的集合
  314. Npc_1 = 410001, --采集任务提交NPC1
  315. Npc_2 = 410002, --采集任务提交NPC2
  316. Npc_3 = 410003, --采集任务提交NPC3
  317. }
  318. -- 本服团战 跟随模型id
  319. GuildModel.GuildWarModelRes = {
  320. SmallRice = 10020202, --粗粮
  321. MiddleRice = 10020202, --中粮
  322. BigRice = 10020202, --精粮
  323. }
  324. -- 本服团战 跟随模型 缩放比例
  325. GuildModel.GuildWarModelResScale =
  326. {
  327. --模型id --缩放比例
  328. [10020202] = 1.6,
  329. [10020202] = 1.6,
  330. [10020202] = 1.6,
  331. }
  332. -- 本国团战对战信息类型
  333. GuildModel.CSGRRankType = {
  334. Mine = 0,
  335. All = 1
  336. }
  337. -- 本国团战排行分页大小
  338. GuildModel.RankPageSize = 10
  339. GuildModel.FightInfoPageSize = 10
  340. -- 本国团战专用属性描述
  341. GuildModel.CSGRAttrName = {
  342. [19] = "攻击",
  343. [25] = "暴击",
  344. [54] = "会心",
  345. [27] = "技伤",
  346. }
  347. -- 社团本国团战中,右侧团员采集信息的颜色配置
  348. GuildModel.CSGRCollectTipsColorCfg = {
  349. [19] = ColorUtil.YELLOW_DARK,
  350. [25] = ColorUtil.RED_DARK,
  351. [54] = ColorUtil.BLUE_DARK,
  352. [27] = ColorUtil.PURPLE_DARK,
  353. }
  354. -- 采集物nameboard颜色
  355. GuildModel.CSGRCollectionNameColor = {
  356. [653101] = ColorUtil.PURPLE_DARK,
  357. [653102] = ColorUtil.PURPLE_DARK,
  358. [653103] = ColorUtil.PURPLE_DARK,
  359. [653104] = ColorUtil.PURPLE_DARK,
  360. }
  361. -- 本国团战侧边栏下方阶段描述
  362. GuildModel.CSGRStageDesc = {
  363. [1] = "采集物资可给社团所有成员增加对应效果,采集的越多效果越强",
  364. [2] = "采集物资可给社团所有成员增加对应效果,采集的越多效果越强",
  365. }
  366. --封印裂隙奖励预览界面奖励 1|封印裂隙奖励 2|封印魔王触发者奖励 3|封印魔王协助者奖励
  367. GuildModel.GuildCollectRewardList = {
  368. [1] = {{100,251008,1},{100,251007,3}},
  369. [2] = {{100,251008,1},{100,251007,3}},
  370. [3] = {{100,251008,1},{100,251007,3}},
  371. }
  372. -- 协助感谢类型
  373. GuildModel.SupportThankType = {
  374. Normal = 1, -- 通用感谢
  375. SpellList = 2, -- 拼单感谢
  376. }
  377. local GuildModel = GuildModel
  378. local Config_Guildbadge = Config.Guildbadge
  379. function GuildModel:__init()
  380. GuildModel.Instance = self
  381. self:ClearData()
  382. end
  383. function GuildModel:getInstance()
  384. if GuildModel.Instance == nil then
  385. GuildModel.New();
  386. end
  387. return GuildModel.Instance;
  388. end
  389. --清除缓存数据
  390. function GuildModel:ClearData()
  391. self.guild_list = {}
  392. self.base_info = {} -- 社团基础信息
  393. self.member_list = {}
  394. self.goods_list = {}
  395. self.role_permission_list = {} --玩家权限列表
  396. self.position_num_list = {} -- 当前职位人数
  397. self.invite_enter_list = {} --邀请入会列表
  398. self.guild_funds = 0 -- 社团资金
  399. self.guid_announce = ""
  400. self.apply_member_list = {}
  401. self.apply_guild_list = {} -- 申请加入社团玩家列表
  402. self.apply_pos_list = {} -- 职位申请列表
  403. self.last_recruit_time = -30 -- 上次发布社团招募信息的时间
  404. self.last_send_chuanwen_time = -10 -- 上次发布社团传闻的时间
  405. self.guild_announce_times_data = nil -- 社团公告修改次数信息
  406. self.guild_kv_cfg = nil
  407. self.guild_collect_kv_cfg = nil -- 社团采集活动常量配置
  408. self._need_auto_botting = false -- 切换到社团场景后是否需要自动挂机
  409. self.guild_event_act_tip_cache = {} -- 社团活动类型提示缓存
  410. self.history_guild_num = 999 -- 历史最大社团创建数,前五时可享受创建折扣
  411. self.handle_40071_flag = false --控制40071查询社团数量的标志 1时处理列表界面 2时处理创建界面
  412. --社团拍卖提示
  413. self.guild_auction_hide = true
  414. self.guild_auction_time = 0
  415. self.guild_auction_cfg = false
  416. -------------------
  417. -- 自动审批的相关内容
  418. self.approve_type = 0 -- 审批设置0:条件自动加1:手动批准入
  419. self.auto_approve_lv = 0 --最低等级
  420. self.auto_approve_power = 0 --最低战力
  421. -- 社团活跃内容
  422. self.personal_active = 0 -- 社团个人活跃
  423. self.personal_stage = 0 -- 社团活跃奖励领取阶段
  424. self.active_task = {} -- 社团任务进度信息
  425. self.guild_active = 0 -- 社团总活跃度
  426. self.guild_active_stage = 0 -- 社团活跃奖励领取阶段
  427. self.guild_week_stime = 0 -- 本周的活跃开始时间(计算结束时间需要加上7*86400)
  428. self.guild_log_list = {} -- 社团日志列表
  429. self.guild_merge_info = nil -- 社团合并信息
  430. self.guild_merge_apply_cache = {} -- 收到其他社团合并请求的社团id缓存
  431. --- 社团拼单 ---
  432. self.guild_sl_data = {} -- 社团拼单信息
  433. self.guild_cur_sl_orderId = nil -- 当前选中的拼单订单id
  434. self.guild_cur_sl_order_data = nil -- 当前选中的拼单
  435. self.guild_sl_invite_time = {} -- 拼单邀请社团成员时间戳
  436. self.cur_guild_spelllist_thankId = nil -- 当前可以自动感谢的拼单协助id 40048
  437. self._dont_check_sl_refresh = false -- 是否检查社团拼单刷新
  438. self._dont_check_sl_invited = false -- 是否检查社团拼单邀请刷新提示
  439. self._dont_check_sl_high_quality = false -- 是否询问高品质拼单的刷新
  440. self._is_in_guild_spelllist_view = false -- 是否在社团拼单界面
  441. --- 社团活动 ---
  442. self.guild_act_list = nil -- 当日所有活动列表(玩家升级||前端跨天 会清除缓存)
  443. --- 红点相关 ---
  444. self.guild_red_cache = {} -- 社团红点缓存
  445. self.merge_tip_red = false -- 低活跃社团合并提示红点
  446. self.save_merge_cache_time = false -- 是否立即更新合并时间的缓存
  447. self.member_refresh_check = true -- 社团主界面人员管理红点首次检查标志
  448. self.member_apply_red = false -- 社团人员管理申请页签红点
  449. self.pos_apply_red = false -- 社团人员管理申请页签红点
  450. self.member_merge_red = false -- 社团人员管理合并按钮红点
  451. self.guild_order_login_red = true -- 社团拼单登录红点
  452. self.guild_event_tab_red = {} -- 社团活动红点列表
  453. self.guild_shop_special_item_red = {} -- 社团特殊商品红点缓存
  454. self.show_guild_shop_red = true -- 展示社团商店红点(需要满足特定条件)
  455. self.g_boss_roll_red_num = 0 -- 社团bossroll点红点数量
  456. -- 社团活动管理
  457. self.guild_evt_data = {} -- 社团活动数据列表,包括活动开启情况和时间
  458. --- 社团采集 ---
  459. self.is_collect_active = false -- 当前采集封印活动是否开启
  460. self.collect_end_time = 0 -- 本次封印活动的结束时间戳
  461. self.now_collect_seal_times = 0 -- 本次封印活动的采集次数
  462. self.collect_left_time = 0 -- 本次封印活动还剩下的时间
  463. self.guild_collect_ignore_list = {} -- 忽略搜索的采集物id
  464. self.day_total_collect_times = 0 --当日一共采集的次数,当天最大不超过30次
  465. self.now_left_collect_mon_count = 0 --场景当前剩余的采集怪数量
  466. self.guild_collect_helper_info = {}--封印裂隙协助者助战信息
  467. self.auto_guild_collect_state = 0--自动采集状态 与自动挂机状态互斥 0|关闭 1|开启
  468. self.now_guild_collect_support_id = 0--当前的封印裂隙唯一协助id
  469. self.last_chat_collect_support_time = 0--上次在聊天频道喊话的时间戳
  470. --- 社团boss ---
  471. self.guild_boss_hp_data = nil -- 社团boss血量信息 40601
  472. self.guild_boss_rank = {} -- 社团boss社团输出排行
  473. self.guild_boss_personal_rank = {} -- 社团boss个人排行信息
  474. self.guild_boss_invincible = nil -- 社团boss狂暴信息
  475. self.guild_boss_hp_sim = 0 --用于血条显示的模拟血量
  476. self.encourage_free_times = 0 --免费鼓舞已经使用的次数
  477. self.encourage_cost_times = 0 --付费鼓舞已经使用的次数
  478. self.encourage_guild_times = 0 --鼓舞社团加成次数
  479. self.gboss_col_drop_id = 0 -- 当前社团boss掉落采集道具掉落id
  480. self.guild_boss_roll_start_time = 0 -- 本轮社团bossroll点的开始时间
  481. self.guild_boss_roll_data_raw = {} -- 社团bossroll点道具数据(自然键值列表)
  482. self.guild_boss_roll_data = {} -- 社团bossroll点道具数据
  483. self.guild_boss_roll_record = {} -- 社团bossroll点记录
  484. self.guild_boss_roll_finished = false -- 社团bossroll点本轮是否已经结束
  485. self.guild_boss_role_highest_roleId = {} -- 社团bossroll点最高分数玩家id缓存
  486. self._gboss_need_show_claim_red = false -- 社团bossroll点界面不存在时是否需要提示roll点按钮红点
  487. -- self.gboss_roll_result = {} -- 社团bossroll点结算信息缓存
  488. -- self.gboss_roll_result_cdtimer_id = nil
  489. -- self.is_in_gboss_result_cd = false
  490. --社团协助相关---
  491. self.guild_support_info = {} -- 社团协助信息列表
  492. self.guild_support_award_info = {}--社团协助奖励信息列表
  493. self.guild_support_cfg = {} --社团协助配置信息
  494. self.guild_support_thank_cfg_id = nil--当前感谢的礼包唯一ID
  495. self.guild_daliy_reputation = nil--每日获得的名望券数量
  496. self.self_support_sid = 0--自己的社团协助ID
  497. self.support_thank_list = {}--协助感谢列表
  498. self.support_gift_list = {}--协助感谢领取列表
  499. self.support_red_list = {}--协助感谢领取列表
  500. self.cur_choose_thank_data = nil
  501. self.is_start_open_support_continue = nil
  502. self.support_is_self_send = false--协助是否是自己发送的
  503. self:InitGuildSupportCfg()
  504. -- 社团派对相关 --
  505. self.guild_party_exp_radio_cfg = nil
  506. self.guild_party_exp = 0 -- 社团派对累计经验值
  507. self.guild_party_exp_eff = 0 -- 社团派对每分钟的预测奖励经验值
  508. self.self_support_status = 0 -- 协助状态
  509. self.guild_scene_mem_num = 0 -- 驻地内玩家人数
  510. self.guild_party_radio = 0 -- 驻地内玩家人数经验效率(万分比)
  511. --本服团战相关
  512. self.guild_war_info = {} --本服团战数据
  513. -- 本国团战相关
  514. self.csgr_kv_config = nil -- 本国团战常量配置
  515. self.csgr_guild_reward_cfg = nil -- 本国团战社团奖励配置
  516. self.csgr_guild_reward_cfg_normal = nil -- 本国团战社团奖励配置(其他战场)
  517. self.csgr_role_reward_cfg = nil -- 本国团战玩家奖励配置
  518. self.csgr_fight_info = nil -- 本轮本国团战同战场公会信息
  519. self.csgr_collect_buff = {} -- 本轮本国团战社团已经采集到的buff信息
  520. self.csgr_bf_res = {} -- 本轮本国团战战场内物资信息
  521. self.csgr_bf_res_refreshtime = 0 -- 战场物资刷新时间戳
  522. self.guild_csgr_result_data = nil -- 本国团战结算信息
  523. self.csgr_result_data = nil -- 本国团战结算协议信息
  524. self.csgr_scene_last_pos = Vector2(0, 0) -- 本国团战上一帧的坐标
  525. self.csgr_collect_cfg_data = nil -- 本国团战采集怪坐标(顺序表)
  526. self.csgr_collect_cfg_data2 = nil -- 本国团战采集怪坐标(attr_id键值表)
  527. self.csgr_auto_collect = false -- 本国团战自动采集标志量
  528. self.need_show_sos = false--默认展示SOS协助图标
  529. self.war_active_show_red_dot = {} --战场活动提示红点缓存
  530. end
  531. function GuildModel:ClearActList( )
  532. self.guild_act_list = nil
  533. end
  534. -- 配置相关 start
  535. -- 获取社团常量配置内容
  536. function GuildModel:GetGuildKvByKey(key)
  537. if not self.guild_kv_cfg then
  538. self.guild_kv_cfg = {}
  539. local temp_key
  540. for k, v in pairs(Config.Guildkv) do
  541. temp_key = Trim(v.key)
  542. self.guild_kv_cfg[temp_key] = v
  543. end
  544. end
  545. return self.guild_kv_cfg[key]
  546. end
  547. -- 获取社团采集活动常量配置内容
  548. function GuildModel:GetGuildCollectKvByKey(key)
  549. if not self.guild_collect_kv_cfg then
  550. self.guild_collect_kv_cfg = {}
  551. local temp_key
  552. for k, v in pairs(Config.Guildcollectkv) do
  553. temp_key = Trim(v.key)
  554. self.guild_collect_kv_cfg[temp_key] = v
  555. end
  556. end
  557. return self.guild_collect_kv_cfg[key]
  558. end
  559. -- 获取社团徽章加成信息
  560. -- type:徽章类型,存在该字段时返回当前社团存在的最高加成的属性值,否则直接返回协议返回的徽章列表
  561. function GuildModel:GetGuildBadgeInfo(type)
  562. local badge_list = self.base_info and self.base_info.badges or {}
  563. if type then
  564. local cfg
  565. for k, v in ipairs(badge_list) do
  566. cfg = Config_Guildbadge[v.id]
  567. -- 存在目标类型的配置时,返回配置的加成值,具体值单位还要参考配置
  568. if cfg and cfg.type == type then
  569. return cfg.effect
  570. end
  571. end
  572. return 0
  573. else
  574. return badge_list
  575. end
  576. end
  577. -- 根据开服天数获取合并社团限制配置
  578. function GuildModel:GetGuildMergeConditionCfg( )
  579. local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
  580. local merge_condition = nil
  581. for k, v in pairs(Config.Guildmerge) do
  582. if v.min_day <= open_day and v.max_day >= open_day then
  583. merge_condition = v
  584. break
  585. end
  586. end
  587. return merge_condition
  588. end
  589. --保存历史社团最大创建数
  590. function GuildModel:SetHistoryGuildNum(vo)
  591. self.history_guild_num = vo.history_guild_num
  592. end
  593. --当前是否创建社团折扣期
  594. function GuildModel:IsInCreateGuildDiscount( )
  595. local total_num = stringtotable(self:GetGuildKvByKey("create_guild_discount").val)[1]
  596. return self.history_guild_num < total_num
  597. end
  598. -- 获取社团商城物品配置
  599. function GuildModel:GetGuildShopGoodsCfg( )
  600. self.guild_shop_cfg = self.guild_shop_cfg or {}
  601. if IsTableEmpty(self.guild_shop_cfg) then
  602. local lv = RoleManager.Instance.mainRoleInfo.level
  603. local guild_lv = self.base_info.guild_lv or 0
  604. for k, v in pairs(Config.Guildcargo) do
  605. if v.lv_min <= lv and v.lv_max >= lv then -- 只显示符合等级区间的商品
  606. v.lock_guild = guild_lv < v.guild_lv
  607. end
  608. self.guild_shop_cfg[#self.guild_shop_cfg+1] = v
  609. end
  610. end
  611. return self.guild_shop_cfg
  612. end
  613. -- 清空社团商店缓存
  614. function GuildModel:ClearGuildShopCfgCache( )
  615. self.guild_shop_cfg = nil
  616. end
  617. -- 获取社团活跃任务状态
  618. function GuildModel:GetGuildActiveTaskCfg( )
  619. --今天是星期几
  620. local cur_weekday = tonumber(os.date("%w", TimeUtil:getServerTime()))
  621. cur_weekday = cur_weekday ~= 0 and cur_weekday or 7
  622. local tb = {}
  623. local task_data = nil
  624. local sort_weight = { -- 根据领取状态获得排序权重
  625. [0] = 1, -- 未完成
  626. [1] = 2, -- 可领取
  627. [2] = 0, -- 已完成
  628. }
  629. for k, v in pairs(Config.Guildtask) do
  630. local day_condition = stringtotable(v.days)
  631. if IsTableEmpty(day_condition) then
  632. task_data = self:GetGuildActiveTaskData(v.id)
  633. local state = task_data and task_data.state or 0
  634. v.sort_weight = sort_weight[state]
  635. tb[#tb+1] = v
  636. else
  637. for k2, v2 in pairs(day_condition) do
  638. if v2 == cur_weekday then
  639. task_data = self:GetGuildActiveTaskData(v.id)
  640. local state = task_data and task_data.state or 0
  641. v.sort_weight = sort_weight[state]
  642. tb[#tb+1] = v
  643. break
  644. end
  645. end
  646. end
  647. end
  648. -- 根据领取状态排序
  649. local sort_func = function ( a, b )
  650. if a.sort_weight == b.sort_weight then
  651. return a.id < b.id
  652. else
  653. return a.sort_weight > b.sort_weight
  654. end
  655. end
  656. table.sort(tb, sort_func)
  657. return tb
  658. end
  659. -- 获取社团活跃配置
  660. function GuildModel:GetActiveRewardCfg( )
  661. local tb = {}
  662. local target_cfg = Config.Guildtaskguildaward
  663. local guild_lv = self.base_info.guild_lv or 1
  664. local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
  665. for k, v in pairs(target_cfg) do
  666. if guild_lv >= v.glv_min and guild_lv <= v.glv_max -- 社团等级满足需求
  667. and open_day >= v.day_min and open_day <= v.day_max then -- 开服天数满足需求
  668. tb[#tb+1] = v
  669. end
  670. end
  671. local sort_func = function ( a, b )
  672. return a.id < b.id
  673. end
  674. table.sort(tb, sort_func)
  675. return tb
  676. end
  677. -- 根据星期数获取当天社团活动
  678. function GuildModel:GetGuildEventByWday(wday)
  679. -- if not wday then return nil end
  680. -- 获取今天全部限时活动数据
  681. if not self.guild_act_list then
  682. local all_act = Config.Ac
  683. local key
  684. local role_lv = RoleManager.Instance.mainRoleInfo.level
  685. self.guild_act_list = {}
  686. local act_list = DailyModel:getInstance():GetWeekCalendarInfo(true) -- 获取限时活动的日历
  687. -- 处理限时活动的部分
  688. for k, wday_evt in ipairs(act_list) do
  689. for k2, evt in ipairs(wday_evt) do
  690. if type(evt) == "table" then
  691. key = evt.module_id .. "@" .. evt.module_sub
  692. if GuildModel.EventModuleId[key]
  693. and Config.Moduleid[evt.module_id]
  694. and Config.Moduleid[evt.module_id].open_lv <= role_lv then -- 2020年3月18日新增活动对等级的要求判断
  695. evt.time_str = wday_evt[1] -- 第一条内容是活动时间
  696. self.guild_act_list[k2 - 1] = self.guild_act_list[k2 - 1] or {}
  697. self:CheckRepeatEvt(self.guild_act_list[k2 - 1], evt)
  698. end
  699. end
  700. end
  701. end
  702. end
  703. if wday then
  704. return self.guild_act_list[wday] or {}
  705. else
  706. return self.guild_act_list
  707. end
  708. end
  709. -- 检查同一活动多个时间段开启的情况,这个时候只保留第一个
  710. function GuildModel:CheckRepeatEvt(list, evt )
  711. -- 判断该社团活动是不是不可以同时在活动界面中存在多个的活动
  712. if not GuildModel.AllowRepeatEvent[evt.module_id] then
  713. for k, v in pairs(list) do
  714. if v.module_id == evt.module_id and v.module_sub == evt.module_sub then
  715. return
  716. end
  717. end
  718. end
  719. table.insert(list, evt)
  720. end
  721. -- 获取目标社团活动的开启时间,格式为周x、x、x 开始时间
  722. -- time_only 只需要活动的时间
  723. function GuildModel:GetGuildEventOpenTime(module_id, module_sub, ac_sub, time_only)
  724. if not module_id or not module_sub then return "" end
  725. ac_sub = ac_sub or 1
  726. local all_list = self:GetGuildEventByWday()
  727. local str, day_num, start_time, end_time = "", 0, "", ""
  728. -- 这里有可能存在开服的前几天没有活动的情况,所以要用pairs
  729. for k, wday_evt in pairs(all_list) do -- 7天的总活动列表
  730. for k2, evt in ipairs(wday_evt) do -- 每天的活动列表
  731. if evt.module_id == module_id and evt.module_sub == module_sub and evt.ac_sub == ac_sub then
  732. day_num = day_num + 1
  733. str = str .. (day_num <= 1 and "" or "") .. TimeUtil:GetWeekStrNum(k)
  734. if start_time == "" then
  735. start_time = Split(evt.time_str, "~")[1]
  736. end_time = Split(evt.time_str, "~")[2]
  737. end
  738. end
  739. end
  740. end
  741. if time_only then
  742. local start_time_tb = Split(start_time, ":")
  743. local s_hour, s_min = tonumber(start_time_tb[1]), start_time_tb[2] == "00" and 0 or tonumber(start_time_tb[2])
  744. local end_time_tb = Split(end_time, ":")
  745. local e_hour, e_min = tonumber(end_time_tb[1]), end_time_tb[2] == "00" and 0 or tonumber(end_time_tb[2])
  746. return s_hour, s_min, e_hour, e_min
  747. else
  748. if day_num >= TableSize(all_list) then
  749. str = "每日"
  750. end
  751. return str .. " <color=#2CF86F>" .. start_time .."-"..end_time.."</color>,限时开启", str
  752. end
  753. end
  754. --获取封印裂隙的开启时间(时间列表中没有区分活动场次的字段,只能特殊处理)
  755. function GuildModel:GetGuildEventCollectOpenTime(index,time_only)--index:场次
  756. local module_id = 408
  757. local module_sub = 0
  758. local all_list = self:GetGuildEventByWday()
  759. local str, day_num, start_time, end_time = "", 0, "", ""
  760. -- 这里有可能存在开服的前几天没有活动的情况,所以要用pairs
  761. local collect_list = {}
  762. for k, wday_evt in pairs(all_list) do -- 7天的总活动列表
  763. for k2, evt in ipairs(wday_evt) do -- 每天的活动列表
  764. if evt.module_id == module_id and evt.module_sub == module_sub then
  765. day_num = day_num + 1
  766. str = str .. (day_num <= 1 and "" or "") .. TimeUtil:GetWeekStrNum(k)
  767. table.insert(collect_list,evt)
  768. end
  769. end
  770. end
  771. if start_time == "" and collect_list[index] then
  772. start_time = Split(collect_list[index].time_str, "~")[1]
  773. end_time = Split(collect_list[index].time_str, "~")[2]
  774. end
  775. if time_only then
  776. local start_time_tb = Split(start_time, ":")
  777. local s_hour, s_min = tonumber(start_time_tb[1]), start_time_tb[2] == "00" and 0 or tonumber(start_time_tb[2])
  778. local end_time_tb = Split(end_time, ":")
  779. local e_hour, e_min = tonumber(end_time_tb[1]), end_time_tb[2] == "00" and 0 or tonumber(end_time_tb[2])
  780. return s_hour, s_min, e_hour, e_min
  781. else
  782. if day_num >= TableSize(all_list) then
  783. str = "每日"
  784. end
  785. return str .. " <color=#2CF86F>" .. start_time .."-"..end_time.."</color>,限时开启"
  786. end
  787. end
  788. --找某个活动的持续时间总长
  789. function GuildModel:GetGuildEventStayTime(module_id, module_sub, ac_sub)
  790. ac_sub = ac_sub or 1
  791. local s_hour, s_min, e_hour, e_min = self:GetGuildEventOpenTime(module_id,module_sub,ac_sub,true)
  792. local stay_time = 0
  793. if e_hour > s_hour then
  794. stay_time = e_min + 60*(e_hour-s_hour) - s_min
  795. else
  796. stay_time = e_min - s_min
  797. end
  798. return stay_time * 60
  799. end
  800. --获取社团boss常量表
  801. function GuildModel:GetGuildBossKV(key)
  802. return Config.Guildbosskv[key].value
  803. end
  804. --初始化协助配置
  805. function GuildModel:InitGuildSupportCfg( )
  806. self.guild_support_cfg = {}
  807. local cfg_data = DeepCopy(Config.Guildsupport)
  808. for k,v in pairs(cfg_data) do
  809. local data = v
  810. data.mod_name = Trim(data.mod_name)
  811. data.thank_reward = stringtotable(v.thank_reward)--进入条件
  812. data.support_reward = stringtotable(v.support_reward)--协助奖励
  813. self.guild_support_cfg[v.support_id] = data
  814. end
  815. end
  816. --得到协助配置
  817. function GuildModel:GetGuildSupportCfg( support_id )
  818. return self.guild_support_cfg[support_id]
  819. end
  820. --得到协助配置
  821. function GuildModel:OpenGuildSupportThankView( )
  822. local function func()
  823. if #self.guild_support_award_info == 0 then
  824. if self.support_time_id then
  825. GlobalTimerQuest:CancelQuest(self.support_time_id)
  826. self.support_time_id = nil
  827. end
  828. end
  829. if #self.guild_support_award_info > 0 and GuildController.Instance
  830. and (GuildController.Instance.GuildSupportThankView and not GuildController.Instance.GuildSupportThankView:HasOpen()
  831. or not GuildController.Instance.GuildSupportThankView)
  832. then
  833. if self.support_time_id then
  834. GlobalTimerQuest:CancelQuest(self.support_time_id)
  835. self.support_time_id = nil
  836. end
  837. GuildModel:getInstance():Fire(GuildModel.OPEN_GUILD_SUPPORT_THANK_VIEW,GuildModel.SupportType.Award)
  838. end
  839. end
  840. if not self.support_time_id then
  841. self.support_time_id = GlobalTimerQuest:AddPeriodQuest(func,0.5)
  842. end
  843. end
  844. --获得玩法名望券
  845. function GuildModel:GetPlayReputation( module_id,module_sub )
  846. for k,v in pairs(self.guild_support_cfg) do
  847. if v.module_id == module_id and v.sub_mod_id == module_sub then
  848. return v.reward_reputation
  849. end
  850. end
  851. end
  852. -- 获取本国团战的常量配置
  853. function GuildModel:GetCSGRConfigByKey(key)
  854. if not self.csgr_kv_config then
  855. self.csgr_kv_config = {}
  856. local temp_key
  857. for k, v in pairs(Config.Campwarkv) do
  858. temp_key = Trim(v.key)
  859. self.csgr_kv_config[temp_key] = v
  860. end
  861. end
  862. return self.csgr_kv_config[key]
  863. end
  864. function GuildModel:GetCSGRRankRewardCfg( )
  865. local sort_func = function ( a, b )
  866. return a.rank_min < b.rank_min
  867. end
  868. if not self.csgr_role_reward_cfg then
  869. self.csgr_role_reward_cfg = {}
  870. local temp_tb
  871. for k, v in pairs(Config.Campwarrolerankreward) do
  872. temp_tb = DeepCopy(v)
  873. temp_tb.rewards = stringtotable(v.rewards)
  874. self.csgr_role_reward_cfg[#self.csgr_role_reward_cfg+1] = temp_tb
  875. end
  876. table.sort(self.csgr_role_reward_cfg, sort_func)
  877. end
  878. if not self.csgr_guild_reward_cfg or not self.csgr_guild_reward_cfg_normal then
  879. self.csgr_guild_reward_cfg = {}
  880. self.csgr_guild_reward_cfg_normal = {}
  881. local temp_tb
  882. for k, v in pairs(Config.Campwarrankreward) do
  883. temp_tb = DeepCopy(v)
  884. temp_tb.rewards = stringtotable(v.rewards)
  885. if v.arena_id == 1 then -- 1号战场
  886. self.csgr_guild_reward_cfg[#self.csgr_guild_reward_cfg+1] = temp_tb
  887. else
  888. self.csgr_guild_reward_cfg_normal[#self.csgr_guild_reward_cfg_normal+1] = temp_tb
  889. end
  890. end
  891. table.sort(self.csgr_guild_reward_cfg, sort_func)
  892. table.sort(self.csgr_guild_reward_cfg_normal, sort_func)
  893. end
  894. return self.csgr_guild_reward_cfg, self.csgr_guild_reward_cfg_normal, self.csgr_role_reward_cfg
  895. end
  896. -- 初始化社团派对挂机效率万分比配置
  897. function GuildModel:GetGuildPartyEffRadioCfg( )
  898. if not self.guild_party_exp_radio_cfg then
  899. self.guild_party_exp_radio_cfg = {}
  900. for k, v in pairs(Config.Guildtriberadio) do
  901. self.guild_party_exp_radio_cfg[#self.guild_party_exp_radio_cfg+1] = v
  902. end
  903. local sort_func = function ( a, b )
  904. return a.num_min < b.num_min
  905. end
  906. table.sort(self.guild_party_exp_radio_cfg, sort_func)
  907. end
  908. return self.guild_party_exp_radio_cfg
  909. end
  910. -- 配置相关 end
  911. --------- 社团协议相关代码 start ---------
  912. -- 设置社团的基本信息 40005
  913. function GuildModel:SetGuildBaseInfo(vo)
  914. self.base_info = vo
  915. self:SortGuildBadge(vo.badges)
  916. end
  917. function GuildModel:GetGuildBaseInfo( )
  918. return self.base_info
  919. end
  920. -- 排序社团徽章的顺序
  921. function GuildModel:SortGuildBadge(badge_list)
  922. if badge_list then
  923. -- 补齐没有勋章的情况
  924. local has_badge1, has_badge2, has_badge3
  925. local temp_cfg = nil
  926. for k, v in pairs(badge_list) do
  927. temp_cfg = Config_Guildbadge[v.id]
  928. if temp_cfg.type == 1 then
  929. has_badge1 = true
  930. elseif temp_cfg.type == 6 then
  931. has_badge2 = true
  932. elseif temp_cfg.type == 2 then
  933. has_badge3 = true
  934. end
  935. end
  936. if not has_badge1 then
  937. badge_list[#badge_list + 1] = {id = 1001, start_time = 0, end_time = 0}
  938. end
  939. if not has_badge2 then
  940. badge_list[#badge_list + 1] = {id = 2001, start_time = 0, end_time = 0}
  941. end
  942. if not has_badge3 then
  943. badge_list[#badge_list + 1] = {id = 3001, start_time = 0, end_time = 0}
  944. end
  945. -- 排序
  946. local sort_func = function ( a, b )
  947. return a.id < b.id
  948. end
  949. table.sort(badge_list, sort_func)
  950. end
  951. end
  952. -- 获取社团的成员列表 40006
  953. function GuildModel:SetGuildMemberList(vo)
  954. self.member_list = vo
  955. end
  956. function GuildModel:GetGuildMemberList( )
  957. return self.member_list
  958. end
  959. -- 设置社团的申请列表 40008
  960. function GuildModel:SetApplyMemberListData(vo)
  961. local sort_func = function ( a, b )
  962. return a.time < b.time
  963. end
  964. table.sort(vo, sort_func)
  965. self.apply_member_list = vo
  966. self:SetApplyDataSpiltJoinAndPos(vo)
  967. end
  968. function GuildModel:GetApplyMemberListData( )
  969. return self.apply_member_list
  970. end
  971. -- 筛选区分加入社团和职位申请的申请信息
  972. function GuildModel:SetApplyDataSpiltJoinAndPos(vo)
  973. if not vo then return end
  974. self.apply_guild_list = {}
  975. self.apply_pos_list = {}
  976. for k, v in ipairs(vo) do
  977. if v.position == 0 then
  978. self.apply_guild_list[#self.apply_guild_list+1] = v
  979. else
  980. self.apply_pos_list[#self.apply_pos_list+1] = v
  981. end
  982. end
  983. end
  984. function GuildModel:GetApplyGuildMemData( )
  985. return self.apply_guild_list
  986. end
  987. function GuildModel:GetApplyPosMemData( )
  988. return self.apply_pos_list
  989. end
  990. -- 更新申请列表 40009 40014
  991. function GuildModel:UpdateApplyMemberList(vo)
  992. for k, v in pairs(self.apply_member_list) do
  993. if v.role_id == vo.role_id then
  994. table.remove(self.apply_member_list, k)
  995. break
  996. end
  997. end
  998. for k, v in pairs(self.apply_guild_list) do
  999. if v.role_id == vo.role_id then
  1000. table.remove(self.apply_guild_list, k)
  1001. break
  1002. end
  1003. end
  1004. for k, v in pairs(self.apply_pos_list) do
  1005. if v.role_id == vo.role_id then
  1006. table.remove(self.apply_pos_list, k)
  1007. break
  1008. end
  1009. end
  1010. end
  1011. -- 设置社团自动加入相关内容 40010
  1012. function GuildModel:SetAutoApproveData(vo)
  1013. self.approve_type = vo.approve_type
  1014. self.auto_approve_lv = vo.auto_approve_lv
  1015. self.auto_approve_power = vo.auto_approve_power
  1016. end
  1017. -- 设置社团公告 40012
  1018. function GuildModel:SetGuildAnnounce(guid_announce)
  1019. self.guid_announce = Trim(guid_announce)
  1020. end
  1021. function GuildModel:UpdateGuildBasicInfoAnnounce(guid_announce)
  1022. if self.base_info then
  1023. self.base_info.announce = guid_announce
  1024. end
  1025. end
  1026. function GuildModel:GetGuildAnnounce( )
  1027. return self.guid_announce
  1028. end
  1029. -- 更新社团玩家职位信息 40013
  1030. function GuildModel:UpdateMemberPositionData( vo )
  1031. for k, v in pairs(self.member_list) do
  1032. if v.role_id == vo.role_id then
  1033. v.position = vo.position
  1034. break
  1035. end
  1036. end
  1037. end
  1038. -- 更新玩家所在的社团信息 40015
  1039. function GuildModel:UpdateGuildBaseInfo(vo)
  1040. self.base_info.guild_id = vo.guild_id
  1041. self.base_info.guild_name = vo.guild_name
  1042. -- self.base_info.guild_lv = vo.guild_lv
  1043. end
  1044. -- 设置社团公告修改次数信息 40019
  1045. function GuildModel:SetGuildAnnounceTimesData(vo)
  1046. self.guild_announce_times_data = self.guild_announce_times_data or {}
  1047. self.guild_announce_times_data.remain_times = vo.remain_times
  1048. self.guild_announce_times_data.free_times = vo.free_times
  1049. end
  1050. function GuildModel:GetGuildAnnounceTimesData( )
  1051. return self.guild_announce_times_data
  1052. end
  1053. --设置玩家的权限 40021
  1054. function GuildModel:SetRolePermission(vo)
  1055. self.role_permission_list = {}
  1056. local len = #vo.permission_type_list
  1057. local permission
  1058. for i = 1,len do
  1059. permission = vo.permission_type_list[i]["permission_type"]
  1060. if permission then
  1061. table.insert(self.role_permission_list,permission)
  1062. end
  1063. end
  1064. self:Fire(GuildModel.RefreshPermissionListEvt)
  1065. end
  1066. --检测玩家是否有当前权限
  1067. function GuildModel:HasOperatePermission(permission)
  1068. local len = #self.role_permission_list
  1069. local vo
  1070. for i = 1,len do
  1071. vo = self.role_permission_list[i]
  1072. if tonumber(vo) == tonumber(permission) then
  1073. return true
  1074. end
  1075. end
  1076. return false
  1077. end
  1078. -- 检测玩家是否对目标职位由任命权限
  1079. function GuildModel:HasAppointPremission(target_pos, cur_pos)
  1080. cur_pos = cur_pos or RoleManager.Instance.mainRoleInfo.position
  1081. if cur_pos > GuildModel.GuildPosition.ViceLeader then return false end
  1082. if cur_pos == GuildModel.GuildPosition.ViceLeader then return cur_pos < target_pos end
  1083. if cur_pos == GuildModel.GuildPosition.Leader then return true end
  1084. end
  1085. --设置当前职位人数 40023
  1086. function GuildModel:SetCurrentPostNumInfo(vo)
  1087. self.position_num_list = vo.position_num_list
  1088. end
  1089. -- 修改社团名称和社团旗帜 40025
  1090. function GuildModel:UpdateGuildNameAndFlag(vo)
  1091. if self.base_info then
  1092. self.base_info.guild_name = vo.guild_name
  1093. self.base_info.guild_flag = vo.guild_flag
  1094. end
  1095. end
  1096. function GuildModel:GetGuildFlag( )
  1097. local flag = 0
  1098. if self.base_info then
  1099. flag = self.base_info.guild_flag or 0
  1100. end
  1101. return flag
  1102. end
  1103. --获取当前职位人数
  1104. function GuildModel:GetMemberNum(position)
  1105. local num = 0
  1106. for k, v in pairs(self.member_list) do
  1107. if v.position == position then
  1108. num = num + 1
  1109. end
  1110. end
  1111. return num
  1112. -- local len = #self.position_num_list
  1113. -- local vo
  1114. -- for i = 1,len do
  1115. -- vo = self.position_num_list[i]
  1116. -- if vo.position == position then
  1117. -- return vo.num
  1118. -- end
  1119. -- end
  1120. -- return 0
  1121. end
  1122. -- 设置商城商品信息 40027
  1123. function GuildModel:SetGuildShopGoodsList(goods_list)
  1124. self.goods_list = {}
  1125. local shop_cfg = self:GetGuildShopGoodsCfg()
  1126. local temp_goods_list = {}
  1127. for k, v in pairs(goods_list) do
  1128. temp_goods_list[v.id] = v
  1129. end
  1130. for k, cfg in ipairs(shop_cfg) do
  1131. -- 获取该商品的购买记录
  1132. local buy_record = temp_goods_list[cfg.id]
  1133. cfg.buy_num = buy_record and buy_record.buyed or 0
  1134. cfg.can_buy = cfg.type == GuildModel.ShopBuyType.NoLimit or cfg.buy_num < cfg.num
  1135. self.goods_list[k] = cfg
  1136. end
  1137. self:SortGuildShopData()
  1138. end
  1139. function GuildModel:SortGuildShopData( )
  1140. local sort_func = function ( a, b )
  1141. if a.lock_guild ~= b.lock_guild then -- 被锁定的在后
  1142. return not a.lock_guild
  1143. elseif a.can_buy ~= b.can_buy then -- 可购买的在前
  1144. return a.can_buy
  1145. else
  1146. if a.type ~= b.type then -- 购买类型大的在前
  1147. return a.type > b.type
  1148. else
  1149. return a.id < b.id
  1150. end
  1151. end
  1152. end
  1153. table.sort(self.goods_list, sort_func)
  1154. end
  1155. function GuildModel:GetGuildShopGoodsList( )
  1156. return self.goods_list
  1157. end
  1158. -- 更新社团商店数据 40028
  1159. function GuildModel:UpdateGuildShopData( vo )
  1160. -- 如果还没有物品列表则不进行处理,直接通过40027协议获得最新的信息
  1161. if IsTableEmpty(self.goods_list) then return end
  1162. for k, v in ipairs(self.goods_list) do
  1163. if v.id == vo.id then
  1164. v.buy_num = v.buy_num + vo.num -- 注意这里服务端返回的是我刚刚买了几个
  1165. v.can_buy = v.type == GuildModel.ShopBuyType.NoLimit or v.buy_num < v.num
  1166. break
  1167. end
  1168. end
  1169. self:SortGuildShopData()
  1170. end
  1171. -- 更新社团经验值和等级 40029
  1172. function GuildModel:UpdateGuildExpAndLv( vo )
  1173. if not vo then return end
  1174. self.base_info.guild_lv = vo.guild_lv
  1175. self.base_info.guild_exp = vo.guild_exp
  1176. end
  1177. -- 单独更新社团成员的在线情况
  1178. function GuildModel:UpdateGuildMemberOnlineFlag(vo)
  1179. if vo and self.member_list then
  1180. for k, v in pairs(self.member_list) do
  1181. if v.role_id == vo.role_id then
  1182. v.online_flag = vo.online_flag
  1183. -- 前端根据在线状态直接更新离线时间
  1184. v.offline_time = v.online_flag ~= 1 and TimeUtil:getServerTime() or 0
  1185. break
  1186. end
  1187. end
  1188. end
  1189. end
  1190. -- 获取社团合并信息 40032
  1191. function GuildModel:SetGuildMergeInfo( vo )
  1192. -- 新获得的合并信息是被其他社团申请合并的信息,则重置刷新红点的限制
  1193. for k, v in ipairs(vo.fapplys) do
  1194. if not self.guild_merge_apply_cache[v.guild_id] then
  1195. self.member_refresh_check = true
  1196. end
  1197. self.guild_merge_apply_cache[v.guild_id] = true
  1198. end
  1199. -- if self.guild_merge_info and self.guild_merge_info.iden ~= vo.iden and vo.iden == 2 then
  1200. -- self.member_refresh_check = true
  1201. -- end
  1202. self.guild_merge_info = vo
  1203. end
  1204. function GuildModel:GetGuildMergeInfo( )
  1205. return self.guild_merge_info
  1206. end
  1207. -- 清空社团合并请求的缓存
  1208. function GuildModel:ClearMergeInfoCache( )
  1209. self.guild_merge_info = nil
  1210. end
  1211. -- 获取社团拼单任务列表 40035
  1212. -- 拼单的规则比较杂,简单来讲首先是需要拿到35协议的拼单,每次选中一个拼单都要发送40036协议(opty:0)定位到拼单信息开始邀请社员
  1213. -- 邀请成员后,人满可以开始任务,也是发送40036协议(opty:1)
  1214. -- 完成任务后方可自动领取奖励,弹出结算界面,并进入感谢参与社员阶段
  1215. function GuildModel:SetGuildSpellListData(vo)
  1216. local sort_func = function ( a, b )
  1217. return a.order < b.order
  1218. end
  1219. table.sort(vo.guild_orders, sort_func)
  1220. self.guild_sl_data = vo
  1221. self:ChooseOrReqGreastestOrder()
  1222. end
  1223. -- 选出当前或者可切换的最高级的拼单
  1224. function GuildModel:ChooseOrReqGreastestOrder( )
  1225. -- 获取当前选中的拼单信息
  1226. local lastest_sl, get_cur_sl = nil, false
  1227. local highest_sl, highest_sl_color = nil, nil
  1228. local temp_cfg = nil
  1229. for k, v in ipairs(self.guild_sl_data.guild_orders) do
  1230. if v.state == 1 or v.state == 2 then
  1231. self.guild_cur_sl_order_data = v
  1232. self.guild_cur_sl_orderId = v.order
  1233. get_cur_sl = true
  1234. break
  1235. end
  1236. if v.state >= 3 and (not lastest_sl or lastest_sl.ftime < v.ftime) then
  1237. lastest_sl = v
  1238. end
  1239. temp_cfg = Config.Guildorder[v.cfg]
  1240. if temp_cfg and v.state == 0 and (not highest_sl_color or highest_sl_color < temp_cfg.color) then
  1241. highest_sl = v.order
  1242. highest_sl_color = temp_cfg.color
  1243. end
  1244. end
  1245. -- 如果没有当前进行中的拼单,则判断还有没有剩余次数,有的话自动接取最高级的拼单,否则固定最后一个拼单结果
  1246. if not get_cur_sl then
  1247. local total_num = self:GetGuildKvByKey("accept_limit").val
  1248. if self.guild_sl_data.ordered < total_num and highest_sl_color then
  1249. self:Fire(GuildModel.REQUEST_CCMD_EVENT, 40036, 0, highest_sl)
  1250. return false
  1251. else
  1252. self.guild_cur_sl_order_data = lastest_sl
  1253. self.guild_cur_sl_orderId = lastest_sl.order
  1254. return true
  1255. end
  1256. end
  1257. return true
  1258. end
  1259. function GuildModel:GetGuildSpellListData( )
  1260. return self.guild_sl_data
  1261. end
  1262. -- 更新选中了的拼单列表信息 40036
  1263. function GuildModel:UpdateGuildSpellListDataStatus(vo)
  1264. if not vo then return end
  1265. self.guild_cur_sl_order_data = nil
  1266. self.guild_cur_sl_orderId = vo.order
  1267. if self.guild_sl_data and self.guild_sl_data.guild_orders then
  1268. -- state 订单状态0初始1选中(可拼单)2已出待完成3已完成可感谢4完全完成
  1269. for k, v in ipairs(self.guild_sl_data.guild_orders) do
  1270. if v.order == vo.order then
  1271. self.guild_cur_sl_order_data = v
  1272. break
  1273. end
  1274. end
  1275. end
  1276. end
  1277. function GuildModel:GetCurSelectedSpellListId( )
  1278. return self.guild_cur_sl_orderId
  1279. end
  1280. -- 获取当前已经选中的拼单数据
  1281. function GuildModel:GetCurSelectedSpellListData( )
  1282. return self.guild_cur_sl_order_data
  1283. end
  1284. -- 完成拼单更新数据 40040
  1285. function GuildModel:UpdateGuildSpellListFinish(vo)
  1286. if not vo then return end
  1287. if self.guild_sl_data and self.guild_sl_data.guild_orders then
  1288. -- state 订单状态0初始1选中(可拼单)2已出待完成3已完成可感谢4完全完成
  1289. for k, v in ipairs(self.guild_sl_data.guild_orders) do
  1290. if v.order == vo.order then
  1291. v.state = 3
  1292. if self.guild_cur_sl_orderId == vo.order then
  1293. self.guild_cur_sl_order_data = v
  1294. end
  1295. break
  1296. end
  1297. end
  1298. end
  1299. end
  1300. -- 更新单个拼单数据
  1301. function GuildModel:UpdateGuildSpellListData(vo)
  1302. if not vo then return end
  1303. if self.guild_sl_data and self.guild_sl_data.guild_orders then
  1304. -- state 订单状态0初始1选中(可拼单)2已出待完成3已完成可感谢4完全完成
  1305. for k, v in ipairs(self.guild_sl_data.guild_orders) do
  1306. if v.order == vo.order then
  1307. v.state = vo.state
  1308. v.process = vo.process
  1309. v.limit = vo.limit
  1310. v.teams = vo.teams
  1311. local need_refresh = true
  1312. if v.state == 4 then
  1313. need_refresh = self:ChooseOrReqGreastestOrder()
  1314. end
  1315. if need_refresh and v.order == self.guild_cur_sl_orderId then
  1316. self.guild_cur_sl_order_data = v
  1317. self:Fire(GuildModel.UPDATE_SELECTED_GUILD_SL_DATA)
  1318. end
  1319. break
  1320. end
  1321. end
  1322. end
  1323. end
  1324. -- 社团拼单邀请社团成员后,记录邀请时间做cd表现
  1325. function GuildModel:SetGuildSLInviteMemTime(role_id)
  1326. if role_id then
  1327. self.guild_sl_invite_time[role_id] = TimeUtil:getServerTime()
  1328. end
  1329. end
  1330. function GuildModel:GetGuildSLInviteMemTime(role_id)
  1331. return self.guild_sl_invite_time[role_id] or 0
  1332. end
  1333. -- 社团拼单是否邀请了假人
  1334. function GuildModel:GetGuildSLInvitedFakeRole( )
  1335. local bool = false
  1336. if self.guild_cur_sl_order_data then
  1337. for k, v in pairs(self.guild_cur_sl_order_data.teams) do
  1338. if v.role_id < 10 then
  1339. bool = true
  1340. break
  1341. end
  1342. end
  1343. end
  1344. return bool
  1345. end
  1346. -- 判断当前成员是否已经接受了邀请
  1347. function GuildModel:GetGuildSLMemInvited(role_id)
  1348. local bool = false
  1349. if self.guild_cur_sl_order_data and role_id then
  1350. for k, v in pairs(self.guild_cur_sl_order_data.teams) do
  1351. if v.role_id == role_id then
  1352. bool = true
  1353. break
  1354. end
  1355. end
  1356. end
  1357. return bool
  1358. end
  1359. -- 判断当前的拼单数据是否可以打开感谢界面
  1360. function GuildModel:OpenGuildSLThankView(order)
  1361. if self.guild_sl_data and self.guild_sl_data.guild_orders then
  1362. -- state 订单状态0初始1选中(可拼单)2已出待完成3已完成可感谢4完全完成
  1363. for k, v in ipairs(self.guild_sl_data.guild_orders) do
  1364. if v.order == order and v.state == 3 then
  1365. -- 构造打开感谢界面的数据
  1366. local vo = {
  1367. support_cfg_id = v.cfg,
  1368. order = v.order,
  1369. role_list = v.teams
  1370. }
  1371. self:Fire(GuildModel.OPEN_GUILD_SL_THANK_VIEW, true, vo)
  1372. break
  1373. end
  1374. end
  1375. end
  1376. end
  1377. -- 社团资金 40043
  1378. function GuildModel:UpdateGuildFunds(vo)
  1379. self.base_info = self.base_info or {}
  1380. self.base_info.guild_funds = vo.value
  1381. self.guild_funds = vo.value
  1382. end
  1383. function GuildModel:SetGuildFunds(funds)
  1384. self.guild_funds = funds
  1385. end
  1386. function GuildModel:GetGuildFunds()
  1387. return self.guild_funds
  1388. end
  1389. -- 更新玩家个人的社团活跃信息 40400
  1390. function GuildModel:SetPersonalGuildActive( vo )
  1391. self.personal_active = vo.labors
  1392. self.personal_stage = vo.stage
  1393. self.active_task = vo.labor_tasks
  1394. end
  1395. -- 获取社团个人活跃值和奖励阶段
  1396. function GuildModel:GetPersonalActiveInfo( )
  1397. return self.personal_active, self.personal_stage
  1398. end
  1399. function GuildModel:GetGuildActiveTaskData(id)
  1400. if id then
  1401. for k, v in pairs(self.active_task) do
  1402. if v.id == id then
  1403. return v
  1404. end
  1405. end
  1406. return nil
  1407. else
  1408. return self.active_task
  1409. end
  1410. end
  1411. -- 缓存社团驻地内玩家人数 40063
  1412. function GuildModel:SetGuildSceneMemberNum(num)
  1413. self.guild_scene_mem_num = num
  1414. self.guild_party_radio = 0
  1415. -- 获取人数挂机效率
  1416. for k, v in pairs(Config.Guildtriberadio) do
  1417. if v.num_min <= num and v.num_max >= num then
  1418. self.guild_party_radio = v.radio
  1419. end
  1420. end
  1421. end
  1422. function GuildModel:GetGuildSceneMemberNum( )
  1423. return self.guild_scene_mem_num, self.guild_party_radio
  1424. end
  1425. -- 更新社团活跃任务 40401
  1426. function GuildModel:UpdateActiveTask( vo )
  1427. for k, v in pairs(self.active_task) do
  1428. if v.id == vo.id and v.type == vo.type then
  1429. v.progress = vo.progress
  1430. v.state = vo.state
  1431. return
  1432. end
  1433. end
  1434. -- 若不能更新到任务,则在这边加入任务进度
  1435. local tb = {
  1436. id = vo.id,
  1437. type = vo.type,
  1438. progress = vo.progress,
  1439. state = vo.state,
  1440. }
  1441. table.insert(self.active_task, tb)
  1442. end
  1443. -- 更新社团总活跃度相关信息 40402
  1444. function GuildModel:SetGuildActiveData( vo )
  1445. self.guild_active = vo.labors
  1446. self.guild_active_stage = vo.stage
  1447. self.guild_week_stime = vo.stime
  1448. end
  1449. function GuildModel:GetGuildActiveData( )
  1450. return self.guild_active, self.guild_active_stage, self.guild_week_stime
  1451. end
  1452. -- 更新活跃奖励领取阶段 40403
  1453. function GuildModel:UpdateActiveStage( vo )
  1454. if vo.opty == 0 then -- 个人活跃奖励领取
  1455. self.personal_stage = vo.stage
  1456. elseif vo.opty == 1 then -- 社团阶段奖励领取
  1457. self.guild_active_stage = vo.stage
  1458. end
  1459. end
  1460. function GuildModel:GetAutoApproveData( )
  1461. return self.approve_type, self.auto_approve_lv, self.auto_approve_power
  1462. end
  1463. -- 服务端广播社团活跃值
  1464. function GuildModel:UpdateGuildActive(active)
  1465. self.guild_active = active
  1466. end
  1467. -- 设置社团日志信息 40404
  1468. function GuildModel:SetGuildLogInfo( vo )
  1469. vo = self:SortGuildLog(vo)
  1470. self.guild_log_list = vo
  1471. end
  1472. function GuildModel:SortGuildLog( list )
  1473. local sort_func = function ( a, b )
  1474. return a.time > b.time
  1475. end
  1476. table.sort(list, sort_func)
  1477. return list
  1478. end
  1479. function GuildModel:GetGuildLogInfo( )
  1480. return self.guild_log_list
  1481. end
  1482. -- 更新社团日志内容 40405
  1483. function GuildModel:UpdateGuildLogInfo( vo )
  1484. self.guild_log_list[#self.guild_log_list+1] = {
  1485. type = vo.type,
  1486. name = vo.name,
  1487. value = vo.value,
  1488. time = vo.time,
  1489. }
  1490. self.guild_log_list = self:SortGuildLog(self.guild_log_list)
  1491. end
  1492. -- 更新玩家个人活跃
  1493. function GuildModel:UpdateGuildActivePersonalActive(active)
  1494. self.personal_active = active
  1495. end
  1496. -- 社团活动玩法相关的数据添加(驻地内玩法)
  1497. -- 活动的类型需要在GuildEventType中注册
  1498. function GuildModel:SetGuildEventByType(type, vo)
  1499. if not type or not vo then return end
  1500. -- 使用同一个参数来标识活动的开启情况
  1501. vo.is_evt_open = false
  1502. if type == GuildEventType.GuildBossNoon then -- 社团午间boss
  1503. vo.is_evt_open = vo.state == 1
  1504. self.guild_event_tab_red["406@1"] = vo.is_evt_open
  1505. -- 主界面右上角入口按钮
  1506. if vo.is_evt_open then
  1507. local end_time = vo.stime + self:GetGuildEventStayTime(406, 1)
  1508. local left_time = end_time - TimeUtil:getServerTime()
  1509. ActivityIconManager:getInstance():addIcon(40601, left_time)
  1510. if not self.guild_event_act_tip_cache[type] then
  1511. if not SceneManager:getInstance():IsGuildScene() then
  1512. GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP,406,1,true)
  1513. end
  1514. self.guild_event_act_tip_cache[type] = true
  1515. end
  1516. else
  1517. ActivityIconManager:getInstance():deleteIcon(40601)
  1518. GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 406, 1)
  1519. -- 活动结束后清除roll点数据
  1520. self:ClearGuildBossRollData(30)
  1521. end
  1522. elseif type == GuildEventType.GuildBossNight then -- 社团晚间boss
  1523. vo.is_evt_open = vo.state == 1
  1524. self.guild_event_tab_red["406@2"] = vo.is_evt_open
  1525. -- 主界面右上角入口按钮
  1526. if vo.is_evt_open then
  1527. local end_time = vo.stime + self:GetGuildEventStayTime(406, 1, 2)
  1528. local left_time = end_time - TimeUtil:getServerTime()
  1529. ActivityIconManager:getInstance():addIcon(40602, left_time)
  1530. if not self.guild_event_act_tip_cache[type] then
  1531. if not SceneManager:getInstance():IsGuildScene() then
  1532. GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP,406,2,true)
  1533. end
  1534. self.guild_event_act_tip_cache[type] = true
  1535. end
  1536. else
  1537. ActivityIconManager:getInstance():deleteIcon(40602)
  1538. GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 406, 2)
  1539. -- 活动结束后清除roll点数据
  1540. self:ClearGuildBossRollData(30)
  1541. end
  1542. elseif type == GuildEventType.NoonCollect then -- 社团午间采集
  1543. vo.is_active = vo.state == 1
  1544. vo.is_evt_open = vo.state == 1
  1545. self.guild_evt_data[type] = vo--封印裂隙要先保存下数据,不然会导致邀请函开启控制失效
  1546. self.guild_event_tab_red["408@0"] = vo.is_evt_open
  1547. self.guild_event_tab_red["408@"..vo.type] = vo.is_evt_open
  1548. --展示主界面右上角活动通知图标
  1549. if vo.state == 1 then
  1550. local curTime = TimeUtil:getServerTime()
  1551. local status_time = vo.end_time - curTime
  1552. ActivityIconManager:getInstance():addIcon(40800, status_time)
  1553. --封印裂隙不再主动弹邀请函
  1554. -- if not self.guild_event_act_tip_cache[type] then
  1555. -- if not SceneManager:getInstance():IsGuildScene() then
  1556. -- if not self:GuildCollectAutoFightIgnoreCollectMon() then
  1557. -- GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP, 408,nil,true)
  1558. -- end
  1559. -- end
  1560. -- self.guild_event_act_tip_cache[type] = true
  1561. -- end
  1562. else
  1563. self.guild_event_act_tip_cache[type] = false
  1564. CommonModel:getInstance():ReSetActClockMaskList(408)
  1565. ActivityIconManager:getInstance():deleteIcon(40800)
  1566. GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 408)
  1567. self:ResetSelfGuildCollectSupportId()
  1568. end
  1569. elseif type == GuildEventType.GuildParty then -- 社团派对
  1570. -- 需要额外判断活动是否已经开放
  1571. local is_module_open = GetModuleIsOpen(400, 7)
  1572. vo.is_evt_open = vo.stime ~= 0 and is_module_open
  1573. self.guild_event_tab_red["400@7"] = vo.is_evt_open
  1574. -- 主界面右上角入口按钮
  1575. if vo.is_evt_open then
  1576. local left_time = vo.etime - TimeUtil:getServerTime()
  1577. ActivityIconManager:getInstance():addIcon(4007, left_time)
  1578. if not self.guild_event_act_tip_cache[type] then
  1579. if not SceneManager:getInstance():IsGuildScene() then
  1580. GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP,400,7,true)
  1581. end
  1582. self.guild_event_act_tip_cache[type] = true
  1583. end
  1584. else
  1585. ActivityIconManager:getInstance():deleteIcon(4007)
  1586. GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 400, 7)
  1587. end
  1588. elseif type == GuildEventType.GuildWar then -- 本服团战
  1589. local cur_time = TimeUtil:getServerTime()
  1590. vo.is_evt_open = vo.etime ~= 0 and vo.state == 1 and cur_time < vo.etime
  1591. self.guild_event_tab_red["405@1"] = vo.is_evt_open
  1592. if vo.is_evt_open then
  1593. local left_time = vo.etime - cur_time
  1594. ActivityIconManager:getInstance():addIcon(40501, left_time)
  1595. self:SetWarActiveRedDot(405, 1, true)
  1596. if not self.guild_event_act_tip_cache[type] then
  1597. GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP,405,nil,true)
  1598. self.guild_event_act_tip_cache[type] = true
  1599. end
  1600. else
  1601. self:SetWarActiveRedDot(405, 1, false)
  1602. ActivityIconManager:getInstance():deleteIcon(40501)
  1603. GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 405)
  1604. end
  1605. elseif type == GuildEventType.GuildCSGR then -- 本国团战
  1606. vo.is_evt_open = vo.status ~= 0
  1607. if vo.is_evt_open then
  1608. ActivityIconManager:getInstance():addIcon(41000 + vo.ac_sub, vo.end_time - TimeUtil:getServerTime())
  1609. self:SetWarActiveRedDot(410, 1, true)
  1610. if not self.guild_event_act_tip_cache[type] then
  1611. GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP, 410, vo.ac_sub, true)
  1612. self.guild_event_act_tip_cache[type] = true
  1613. end
  1614. else
  1615. self:SetWarActiveRedDot(410, 1, false)
  1616. ActivityIconManager:getInstance():deleteIcon(41000 + vo.ac_sub)
  1617. GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 410, vo.ac_sub)
  1618. end
  1619. if vo.status == 3 then -- 打开boss假血条表现
  1620. self:StartCSGRBossHpTimer()
  1621. end
  1622. end
  1623. self.guild_evt_data[type] = vo
  1624. end
  1625. function GuildModel:GetGuildEventByType(type)
  1626. return type and self.guild_evt_data[type]
  1627. end
  1628. function GuildModel:CheckGuildAuctionShow(vo)
  1629. self.guild_auction_hide = true
  1630. if vo.etime then
  1631. local cfg = self:LoadGuildAuctionCfg()
  1632. if cfg and cfg.e_time == vo.etime then
  1633. return
  1634. end
  1635. local time = TimeUtil:getServerTime()
  1636. if vo.etime > time and vo.etime <= time + 1800 +5 then
  1637. self.guild_auction_hide = false
  1638. self.guild_auction_time = vo.etime
  1639. end
  1640. end
  1641. end
  1642. function GuildModel:IsGuildAuctionShow()
  1643. return not self.guild_auction_hide
  1644. end
  1645. function GuildModel:SetGuildAuctionHide()
  1646. self.guild_auction_hide = true
  1647. self.guild_auction_cfg =
  1648. {
  1649. e_time = self.guild_auction_time,
  1650. }
  1651. self:SaveGuildAuctionCfg()
  1652. end
  1653. --保存社团拍卖提示
  1654. function GuildModel:SaveGuildAuctionCfg()
  1655. if self.guild_auction_cfg then
  1656. CookieWrapper.Instance:SaveCookie(CookieLevelType.Account, CookieTimeType.TYPE_ALWAYS, CookieKey.GUILD_SCENE_AUCION, self.guild_auction_cfg)
  1657. CookieWrapper.Instance:WriteAll()
  1658. end
  1659. end
  1660. --加载社团拍卖提示
  1661. function GuildModel:LoadGuildAuctionCfg()
  1662. self.guild_auction_cfg = CookieWrapper.Instance:GetCookie(CookieLevelType.Account, CookieKey.GUILD_SCENE_AUCION)
  1663. return self.guild_auction_cfg
  1664. end
  1665. --判断活动是否开启
  1666. function GuildModel:IsGuildEventActive(event_type)
  1667. return event_type and self.guild_evt_data[event_type] and self.guild_evt_data[event_type].is_evt_open or false
  1668. end
  1669. function GuildModel:GetGuildEventData()
  1670. return self.guild_evt_data
  1671. end
  1672. ----------封印裂隙玩法---start
  1673. --传入开始时间的时,获取第几场
  1674. function GuildModel:GetActivityRound(s_h,s_m)
  1675. local act_list = Config.Ac["408@0@1"]
  1676. local time_list = stringtotable(act_list.time_region)
  1677. local max_length = #time_list
  1678. for i,v in ipairs(time_list) do--遍历场次
  1679. if tonumber(s_h) == tonumber(v[1][1]) and tonumber(s_m) == tonumber(v[1][2]) then
  1680. return i
  1681. end
  1682. end
  1683. return 0
  1684. end
  1685. --根据怪物id获取采集活动的协助奖励配置
  1686. function GuildModel:GetGuildCollectMonRewardCfgById(mon_id)
  1687. local cfg = config.Guildcollectmonrewards
  1688. return cfg[mon_id] or nil
  1689. end
  1690. --社团采集活动状态 40801(主推是04协议,01协议这里只用来请求结束时间)
  1691. function GuildModel:SetGuildCollectActivityState(vo)
  1692. self.is_collect_active = vo.state == 1 and true or false --午间采集当前是否开着
  1693. self.collect_end_time = vo.end_time --当前午间采集活动的结束时间戳
  1694. if vo.state == 1 then--活动开始时开始进行倒计时
  1695. self:SetCollectLeftTime(self.collect_end_time)
  1696. end
  1697. end
  1698. --社团采集活动状态 40804 (后端主推通知活动开始和结束)
  1699. function GuildModel:SetGuildCollectActivityState2(vo)
  1700. self.is_collect_active = vo.state == 1 and true or false --午间采集当前是否开着
  1701. end
  1702. --社团采集活动参与信息 40802
  1703. function GuildModel:SetGuildCollectActivityInfo(vo)
  1704. self.day_total_collect_times = vo.count--今日已采集总次数
  1705. end
  1706. --采集场景右上角信息 40803
  1707. function GuildModel:SetGuildCollectActivityDetailInfo(vo)
  1708. self.now_collect_seal_times = vo.count1 --本次封印活动采集次数
  1709. self.day_total_collect_times = vo.total_count--今日已采集总次数
  1710. end
  1711. --午间采集活动是否开启中
  1712. function GuildModel:IsGuildCollectActive( )
  1713. return self.is_collect_active
  1714. end
  1715. --获取当前采集的结束时间戳
  1716. function GuildModel:GetNowCollectEndTime( )
  1717. return self.collect_end_time
  1718. end
  1719. --获取本次封印活动的采集次数
  1720. function GuildModel:GetNowCollectSealTimes( )
  1721. return self.now_collect_seal_times
  1722. end
  1723. --获取封印活动今日已采集的总次数
  1724. function GuildModel:GetDayTotalCollectTimes( )
  1725. return self.day_total_collect_times
  1726. end
  1727. --午间采集活动倒计时
  1728. function GuildModel:SetCollectLeftTime(end_time)
  1729. self:StopGuildCollectTimer()
  1730. local function checkLeftTime()
  1731. self.collect_left_time = end_time - TimeUtil:getServerTime()
  1732. self:Fire(GuildModel.UPDATE_GUILD_COLLECT_LEFT_TIME, self.collect_left_time)
  1733. end
  1734. checkLeftTime()
  1735. local function onTimer()
  1736. checkLeftTime()
  1737. if self.collect_left_time <= 0 then
  1738. self:StopGuildCollectTimer()
  1739. end
  1740. end
  1741. if self.collect_left_time_id == nil then
  1742. if self.collect_left_time > 0 then
  1743. self.collect_left_time_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 0.5, -1)
  1744. end
  1745. end
  1746. end
  1747. function GuildModel:StopGuildCollectTimer( )
  1748. self.collect_left_time = 0
  1749. if self.collect_left_time_id then
  1750. GlobalTimerQuest:CancelQuest(self.collect_left_time_id)
  1751. self.collect_left_time_id = nil
  1752. end
  1753. end
  1754. --是否能继续采集 当次次数封印次数已满或者活动次数已满不给采集
  1755. function GuildModel:CanCollect()
  1756. --单场次数
  1757. local MaxCollectSealTimes = self:GetGuildCollectKvByKey("collet_time").value
  1758. local bool_seal = self:GetNowCollectSealTimes() < MaxCollectSealTimes
  1759. --一天最多次数
  1760. local MaxDayCollectSealTimes = self:GetGuildCollectKvByKey("join_time_day").value
  1761. local bool_day = self:GetDayTotalCollectTimes() < MaxDayCollectSealTimes
  1762. local bool_activity = false
  1763. local nc_data = self:GetGuildEventByType(GuildEventType.NoonCollect)
  1764. if nc_data then
  1765. bool_activity = nc_data.is_evt_open
  1766. end
  1767. return bool_seal and bool_activity and bool_day
  1768. end
  1769. --判断不能采集的原因 1|本次次数满 2|今日次数满
  1770. function GuildModel:GetCanNotCollectReason( )
  1771. local MaxCollectSealTimes = self:GetGuildCollectKvByKey("collet_time").value
  1772. local bool_seal = self:GetNowCollectSealTimes() < MaxCollectSealTimes
  1773. local MaxDayCollectSealTimes = self:GetGuildCollectKvByKey("join_time_day").value
  1774. local bool_day = self:GetDayTotalCollectTimes() < MaxDayCollectSealTimes
  1775. --优先今日总次数
  1776. if not bool_day then
  1777. return 2
  1778. else
  1779. if not bool_seal then
  1780. return 1
  1781. end
  1782. end
  1783. return 0
  1784. end
  1785. --封印裂隙活动中时次数满是否忽略采集怪
  1786. function GuildModel:GuildCollectAutoFightIgnoreCollectMon( )
  1787. local bool_activity = false
  1788. local nc_data = self:GetGuildEventByType(GuildEventType.NoonCollect)
  1789. if nc_data then
  1790. bool_activity = nc_data.is_evt_open
  1791. end
  1792. if not bool_activity then --如果不在活动中,返回false,避免影响其他情况
  1793. return false
  1794. else--在活动中且次数满返回true
  1795. --单场活动最多10次
  1796. local MaxCollectSealTimes = self:GetGuildCollectKvByKey("collet_time").value
  1797. local bool_seal = self:GetNowCollectSealTimes() < MaxCollectSealTimes
  1798. --一天最多30次
  1799. local MaxDayCollectSealTimes = self:GetGuildCollectKvByKey("join_time_day").value
  1800. local bool_day = self:GetDayTotalCollectTimes() < MaxDayCollectSealTimes
  1801. if not bool_seal or not bool_day then
  1802. return true
  1803. else
  1804. return false
  1805. end
  1806. end
  1807. end
  1808. -- 1)保留“自动封印”按钮,该按钮仅控制是否采集
  1809. -- 2)自动挂机需要根据当前状态判断挂机行为
  1810. -- 1.无封印次数时,点击挂机仅打怪
  1811. -- 2.有封印次数时,且未选中怪物,未进入协助状态时,仅采集
  1812. -- 3.有封印次数时,选中怪物,则攻击该怪物,击杀后变为无目标状态,继续采集
  1813. -- 4.有封印次数时,点击协助,攻击协助对象怪物,击杀后变为无目标状态,继续采集
  1814. --新的封印裂隙自动采集逻辑
  1815. --剩余的采集怪数量
  1816. function GuildModel:SetGuildCollectLeftMon(vo)
  1817. self.now_left_collect_mon_count = vo.count
  1818. end
  1819. --获取剩余的采集怪数量
  1820. function GuildModel:GetGuildCollectLeftMon( )
  1821. return self.now_left_collect_mon_count
  1822. end
  1823. --封印裂隙协助者助战信息
  1824. function GuildModel:SetGuildCollectHelperInfo(data,remove_id)
  1825. if remove_id then
  1826. self.guild_collect_helper_info[remove_id] = nil
  1827. return
  1828. end
  1829. if not data then return end
  1830. self.guild_collect_helper_info[data.role_id] = data
  1831. end
  1832. --获取封印裂隙协助者助战信息
  1833. function GuildModel:GetCollectHelperInfo( )
  1834. return self.guild_collect_helper_info
  1835. end
  1836. --设置自动采集状态
  1837. function GuildModel:SetAutoGuildCollectState(bool)
  1838. self.auto_guild_collect_state = bool and 1 or 0
  1839. if not bool then
  1840. --取消自动采集时清空当前的选中对象
  1841. -- GlobalEventSystem:Fire(EventName.CANCEL_TO_COLLECT)
  1842. -- Scene.Instance:CancelClickTarget(nil,true) --把目标清掉
  1843. else
  1844. --切换到自动采集状态时,立刻过去寻路找采集怪
  1845. self:Fire(GuildModel.AUTO_FIND_WAY_TO_GUILD_COLLECT_MON)
  1846. end
  1847. end
  1848. --获取自动采集状态
  1849. function GuildModel:GetAutoGuildCollectState( )
  1850. return self.auto_guild_collect_state
  1851. end
  1852. --是否为自动采集状态
  1853. function GuildModel:IsAutoGuildCollectState()
  1854. return self.auto_guild_collect_state == 1
  1855. end
  1856. --保存当前的封印裂隙协助唯一id
  1857. function GuildModel:SetSelfGuildCollectSupportId(id)
  1858. self.now_guild_collect_support_id = id
  1859. end
  1860. function GuildModel:ResetSelfGuildCollectSupportId( )
  1861. self.now_guild_collect_support_id = 0
  1862. end
  1863. function GuildModel:GetSelfGuildCollectSupportId( )
  1864. return self.now_guild_collect_support_id
  1865. end
  1866. ----------封印裂隙玩法---end
  1867. -- 社团boss相关
  1868. -- 获取社团boss血量数据
  1869. function GuildModel:GetGuildBossHp( )
  1870. return self.guild_boss_hp_data
  1871. end
  1872. -- 更新晚间boss伤害排行数据 40602 40603
  1873. function GuildModel:SetGuildBossRank(boss_type, rank_type, vo)
  1874. if not boss_type or not rank_type then return end
  1875. self:RankSortFunc(vo.hurt_list, "rank")
  1876. self.guild_boss_rank[boss_type] = self.guild_boss_rank[boss_type] or {}
  1877. --过滤掉列表中伤害为0的
  1878. self.guild_boss_rank[boss_type][rank_type] = {}
  1879. for i,v in ipairs(vo.hurt_list) do
  1880. if v.hurt ~= 0 then
  1881. table.insert(self.guild_boss_rank[boss_type][rank_type],v)
  1882. end
  1883. end
  1884. end
  1885. function GuildModel:GetGuildBossRank(boss_type, rank_type)
  1886. return self.guild_boss_rank[boss_type] and self.guild_boss_rank[boss_type][rank_type] or {}
  1887. end
  1888. -- 伤害排行排序
  1889. function GuildModel:RankSortFunc(list, val)
  1890. if not val then return end
  1891. local sort_func = function ( a, b )
  1892. return a[val] < b[val]
  1893. end
  1894. table.sort(list, sort_func)
  1895. end
  1896. -- 更新晚间boss个人排行信息 40604
  1897. function GuildModel:SetGuildBossPersonalRank(boss_type, vo)
  1898. self.guild_boss_personal_rank[boss_type] = self.guild_boss_personal_rank[boss_type] or {}
  1899. self.guild_boss_personal_rank[boss_type][vo.opty] = vo
  1900. end
  1901. function GuildModel:GetGuildBossPersonalRank(boss_type, type)
  1902. return self.guild_boss_personal_rank[boss_type] and self.guild_boss_personal_rank[boss_type][type] or nil
  1903. end
  1904. -- 对晚间boss活动的结算奖励和排行做排序
  1905. function GuildModel:SortGuildBossResult(vo)
  1906. -- 道具排序规则是品质降序,id升序
  1907. local good_basic
  1908. for k, v in pairs(vo.role_awards) do
  1909. good_basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(v.goodsid)
  1910. v.color = good_basic.color
  1911. end
  1912. for k, v in pairs(vo.guild_awards) do
  1913. good_basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(v.goodsid)
  1914. v.color = good_basic.color
  1915. end
  1916. local sort_goods = function ( a, b )
  1917. if a.color == b.color then
  1918. return a.goodsid < b.goodsid
  1919. else
  1920. return a.color > b.color
  1921. end
  1922. end
  1923. if vo.role_awards and TableSize(vo.role_awards) > 1 then
  1924. table.sort(vo.role_awards, sort_goods)
  1925. end
  1926. if vo.guild_awards and TableSize(vo.guild_awards) > 1 then
  1927. table.sort(vo.guild_awards, sort_goods)
  1928. end
  1929. end
  1930. function GuildModel:SetGuildBossInvincible(vo)
  1931. self.guild_boss_invincible = vo
  1932. end
  1933. function GuildModel:GetGuildBossInvincible( )
  1934. return self.guild_boss_invincible
  1935. end
  1936. -- 获得boss坐标
  1937. function GuildModel:GetGuildBossPos( )
  1938. local pos_data = stringtotable(Config.Guildbosskv["mon_pos"].value)
  1939. return pos_data[1],pos_data[2]
  1940. end
  1941. -- 设置boss血量(伪,并非真血量,而是用于显示血条的模拟)
  1942. function GuildModel:SetGuildBossHpSimulation(hp)
  1943. self.guild_boss_hp_sim = hp
  1944. self:ChangeVar("guild_boss_hp_sim", hp,false,true)
  1945. end
  1946. function GuildModel:GetGuildBossHpSimulation( )
  1947. return self.guild_boss_hp_sim
  1948. end
  1949. --社团boss鼓舞数据 40607
  1950. function GuildModel:SetGuildBossEncourageData(vo)
  1951. self:ChangeVar("encourage_free_times", vo.free_times, false, true)
  1952. self:ChangeVar("encourage_cost_times", vo.cost_times, false, true)
  1953. self:ChangeVar("encourage_guild_times", vo.guild_times, false, true)
  1954. end
  1955. --广播更新社团鼓舞次数 40609
  1956. function GuildModel:UpdateGuildBossEncourageGuildTimes(vo)
  1957. self:ChangeVar("encourage_guild_times", vo.guild_times, false, true)
  1958. end
  1959. -- 设置当前社团采集的道具id
  1960. function GuildModel:SetCurGuildBossCollectDropId(drop_id)
  1961. self.gboss_col_drop_id = drop_id
  1962. end
  1963. function GuildModel:GetCurGuildBossCollectDropId( )
  1964. return self.gboss_col_drop_id
  1965. end
  1966. --获取剩余的免费鼓舞次数
  1967. function GuildModel:GetLeftFreeEncourageTimes( )
  1968. return self.encourage_free_times
  1969. end
  1970. --获取剩余的付费鼓舞次数
  1971. function GuildModel:GetleftCostEncourageTimes( )
  1972. return self.encourage_cost_times
  1973. end
  1974. --获取社团鼓舞加成次数
  1975. function GuildModel:GetEncourageGuildTimes( )
  1976. return self.encourage_guild_times
  1977. end
  1978. function GuildModel:CacheGuildIgnoreCollectId(instance_id)
  1979. self.guild_collect_ignore_list[instance_id] = true
  1980. end
  1981. function GuildModel:ClearGuildIgnoreCollectId(instance_id)
  1982. if self.guild_collect_ignore_list[instance_id] then
  1983. self.guild_collect_ignore_list[instance_id] = nil
  1984. end
  1985. end
  1986. function GuildModel:IsGuildIgnoreCollection(instance_id)
  1987. return self.guild_collect_ignore_list[instance_id]
  1988. end
  1989. function GuildModel:ClearGuildIgnoreCollection( )
  1990. self.guild_collect_ignore_list = {}
  1991. end
  1992. -- 社团boss roll点数据缓存 每一轮roll点重置并刷新 40613
  1993. function GuildModel:SetGuildBossRollData(vo)
  1994. self:ClearGuildBossRollData()
  1995. self.guild_boss_roll_start_time = vo.start_time
  1996. self.guild_boss_roll_data_raw = vo.roll_list
  1997. for k, v in ipairs(vo.roll_list) do
  1998. self.guild_boss_roll_data[v.order_id] = v
  1999. end
  2000. end
  2001. function GuildModel:GetGuildBossRollStartTime( )
  2002. return self.guild_boss_roll_start_time
  2003. end
  2004. function GuildModel:GetGuildBossRollData( )
  2005. return self.guild_boss_roll_data_raw
  2006. end
  2007. -- 根据id获取roll点数据
  2008. function GuildModel:GetGuildBossRollDataByOrderId(order_id)
  2009. if not order_id then return end
  2010. return self.guild_boss_roll_data[order_id] or nil
  2011. end
  2012. -- 清除社团bossroll点缓存数据 delay_sec 是否延迟
  2013. function GuildModel:ClearGuildBossRollData(delay_sec)
  2014. if self.delay_clear_gboss_roll_data_id then
  2015. GlobalTimerQuest:CancelQuest(self.delay_clear_gboss_roll_data_id)
  2016. self.delay_clear_gboss_roll_data_id = nil
  2017. end
  2018. if delay_sec then
  2019. local function delay_method( )
  2020. self:ClearGuildBossRollData()
  2021. end
  2022. self.delay_clear_gboss_roll_data_id = setTimeout(delay_method, delay_sec)
  2023. else
  2024. self.guild_boss_roll_data_raw = {}
  2025. self.guild_boss_roll_data = {}
  2026. self.guild_boss_role_highest_roleId = {}
  2027. self.guild_boss_roll_record = {}
  2028. self:SetGuildBossRollIsFinished(false)
  2029. end
  2030. end
  2031. -- 根据roll点结果,更新缓存 40614
  2032. function GuildModel:UpdateGuildBossRollData(vo)
  2033. if vo then
  2034. for k, v in pairs(self.guild_boss_roll_data_raw) do
  2035. if v.order_id == vo.order_id then
  2036. v.roll_num = vo.roll_num
  2037. break
  2038. end
  2039. end
  2040. if self.guild_boss_roll_data[vo.order_id] then
  2041. self.guild_boss_roll_data[vo.order_id].roll_num = vo.roll_num
  2042. end
  2043. end
  2044. end
  2045. function GuildModel:SetGuildBossRollIsFinished(bool)
  2046. self.guild_boss_roll_finished = bool
  2047. end
  2048. function GuildModel:GetGuildBossRollIsFinished( )
  2049. return self.guild_boss_roll_finished
  2050. end
  2051. -- 获取社团boss的玩家roll点次数红点
  2052. function GuildModel:CheckGuildBossNumRed( )
  2053. self.g_boss_roll_red_num = 0
  2054. local cur_time = TimeUtil:getServerTime()
  2055. local roll_delay_time = self:GetGuildBossKV("roll_time") -- 几秒后结束roll点
  2056. if not self.guild_boss_roll_finished then -- 如果roll点阶段内,则判断有几个道具没有roll
  2057. for k, v in pairs(self.guild_boss_roll_data_raw) do
  2058. if (cur_time < (self.guild_boss_roll_start_time + roll_delay_time)) and v.roll_num == 0 then
  2059. self.g_boss_roll_red_num = self.g_boss_roll_red_num + 1
  2060. end
  2061. end
  2062. else -- 如果roll点阶段外,则判断是否需要提示获得了几件道具
  2063. if self._gboss_need_show_claim_red then
  2064. local role_id = RoleManager.Instance.mainRoleInfo.role_id
  2065. for k, v in pairs(self.guild_boss_role_highest_roleId) do
  2066. if v == role_id then
  2067. self.g_boss_roll_red_num = self.g_boss_roll_red_num + 1
  2068. end
  2069. end
  2070. end
  2071. end
  2072. return self.g_boss_roll_red_num
  2073. end
  2074. function GuildModel:GetGuildBossNumRed( )
  2075. return self.g_boss_roll_red_num
  2076. end
  2077. -- 查询roll点信息 40616
  2078. function GuildModel:SetGuildBossRollRecord(vo)
  2079. if vo then
  2080. self.guild_boss_roll_record[vo.order_id] = vo.role_list
  2081. end
  2082. if self.guild_boss_roll_finished then
  2083. self:GetGuildBossRollHighestRoleId(vo.order_id)
  2084. end
  2085. end
  2086. function GuildModel:GetGuildBossRollRecord(order_id)
  2087. if order_id then
  2088. return self.guild_boss_roll_record[order_id]
  2089. end
  2090. end
  2091. -- 当本轮roll点结束后,调用此方法,计算一次缓存中所有的记录的最高玩家id update_order_id 只更新目标id
  2092. function GuildModel:GetGuildBossRollHighestRoleId(update_order_id)
  2093. for order_id, record_list in pairs(self.guild_boss_roll_record) do
  2094. if not update_order_id or update_order_id == order_id then
  2095. local highest_roll_num, target_role_id = nil, 0
  2096. for k, record in pairs(record_list) do
  2097. if not highest_roll_num or highest_roll_num < record.roll_num then
  2098. highest_roll_num = record.roll_num
  2099. target_role_id = record.role_id
  2100. end
  2101. end
  2102. self.guild_boss_role_highest_roleId[order_id] = target_role_id
  2103. end
  2104. end
  2105. self:Fire(GuildModel.UPDATE_GUILD_BOSS_HIGHEST_DATA, update_order_id or nil)
  2106. end
  2107. -- 根据id获取本轮roll点点数最高的玩家id
  2108. function GuildModel:GetGuildBossRollHighestByOrderId(order_id)
  2109. if not order_id then return 0 end
  2110. return self.guild_boss_role_highest_roleId[order_id] or 0
  2111. end
  2112. -- 缓存数据,定时发送特殊社团聊天内容
  2113. -- function GuildModel:CacheGuildBossRollResult(vo, roll_num, max_roll)
  2114. -- if vo and roll_num and max_roll then
  2115. -- -- print("Saber:GuildModel [start:2057] ------------------------------------------")
  2116. -- table.insert(self.gboss_roll_result, {
  2117. -- goods_type_id = vo.goods_type_id,
  2118. -- num = vo.num,
  2119. -- roll_num = roll_num,
  2120. -- max_roll = max_roll,
  2121. -- })
  2122. -- self:LoadGuildBossRollResult()
  2123. -- end
  2124. -- end
  2125. -- -- 读取roll点缓存,发送玩家名义的roll点聊天内容
  2126. -- function GuildModel:LoadGuildBossRollResult( )
  2127. -- if not self.is_in_gboss_result_cd then
  2128. -- local vo = table.remove(self.gboss_roll_result, 1)
  2129. -- if vo then
  2130. -- -- print("Saber:GuildModel [start:2072] ------------------------------------------")
  2131. -- local goods_name = GoodsModel:getInstance():getGoodsName(vo.goods_type_id, true)
  2132. -- ChatModel:getInstance():Fire(
  2133. -- ChatModel.SEND_MSG, ChatModel.CHANNEL_GUILD,
  2134. -- string.format("我在<color=%s>[社团幻魔]</color>中对%s掷出了<color=%s>%s</color>点(当前最高<color=%s>%s</color>点)",
  2135. -- ColorUtil.BLUE_DARK, goods_name, ColorUtil.GREEN_DARK, vo.roll_num, ColorUtil.GREEN_DARK, vo.max_roll),
  2136. -- 0, "[{notcd, 1}]")
  2137. -- -- 毫秒计时 多延迟100毫秒
  2138. -- local cd_end_time = TimeUtil:getServerTimeMs() + 100
  2139. -- local function gboss_roll_result_cdtimer()
  2140. -- local cd_finished = cd_end_time < TimeUtil:getServerTimeMs()
  2141. -- if cd_finished then
  2142. -- -- print("Saber:GuildModel [start:2084] ------------------------------------------")
  2143. -- self:ClearGuildBossRollResultCDTimer()
  2144. -- self.is_in_gboss_result_cd = false
  2145. -- self:LoadGuildBossRollResult()
  2146. -- end
  2147. -- end
  2148. -- self.gboss_roll_result_cdtimer_id = GlobalTimerQuest:AddPeriodQuest(gboss_roll_result_cdtimer, 0.01, -1)
  2149. -- self.is_in_gboss_result_cd = true
  2150. -- end
  2151. -- end
  2152. -- end
  2153. -- function GuildModel:ClearGuildBossRollResultCDTimer( )
  2154. -- if self.gboss_roll_result_cdtimer_id then
  2155. -- GlobalTimerQuest:CancelQuest(self.gboss_roll_result_cdtimer_id)
  2156. -- self.gboss_roll_result_cdtimer_id = nil
  2157. -- end
  2158. -- end
  2159. -- 社团boss相关 end
  2160. -- 社团派对相关
  2161. -- 缓存社团派对经验和祝火状态 40058
  2162. function GuildModel:SetGuildPartyExpData(vo)
  2163. self.guild_party_exp = vo.exp
  2164. -- self.guild_party_pos = vo.pos
  2165. end
  2166. function GuildModel:GetGuildPartyExpData( )
  2167. return self.guild_party_exp
  2168. end
  2169. -- 更新社团派对的经验值 40059
  2170. function GuildModel:UpdateGuildPartyExp(vo)
  2171. self.guild_party_exp = self.guild_party_exp + vo.exp
  2172. self.guild_party_exp_eff = vo.exp * 12 -- 这个经验值是5秒给一次,这里计算一次每分钟的经验值
  2173. if self.guild_evt_data[GuildEventType.GuildParty] then
  2174. self.guild_evt_data[GuildEventType.GuildParty].ltime = vo.ltime
  2175. end
  2176. end
  2177. function GuildModel:GetGuildPartyExpEffPerMin( )
  2178. return self.guild_party_exp_eff
  2179. end
  2180. --设置社团协助信息前往协助列表 40046
  2181. function GuildModel:SetGuildSupportInfo( scmd )
  2182. self.guild_support_info = scmd.support_list
  2183. --判断当前唯一协助id是不是封印裂隙的
  2184. for k,v in pairs(self.guild_support_info) do
  2185. if scmd.self_support_sid == v.support_sid and v.support_cfg_id == 2 then
  2186. self:SetSelfGuildCollectSupportId(scmd.self_support_sid)
  2187. end
  2188. end
  2189. end
  2190. function GuildModel:GetGuildSupportInfo( )
  2191. return self.guild_support_info
  2192. end
  2193. --通过sid获取某一个协助
  2194. function GuildModel:GetGuildSupportInfoById( support_sid )
  2195. local list = self:GetGuildSupportInfo()
  2196. local info
  2197. if list and #list > 0 then
  2198. for i,v in ipairs(list) do
  2199. if v.support_sid == support_sid then
  2200. info = v
  2201. break
  2202. end
  2203. end
  2204. end
  2205. return info
  2206. end
  2207. --解析协助状态信息
  2208. function GuildModel:ParseGuildSupportData(str)
  2209. local bosspower = 0
  2210. local end_time = 0
  2211. local boss_id = 0
  2212. local dun_id = 0
  2213. local status = 0
  2214. if str and str ~= "" then
  2215. local info = stringtotable(str)
  2216. if info and #info > 0 then
  2217. for i,v in ipairs(info) do
  2218. local key = tonumber(v[1])
  2219. if key == 1 then
  2220. bosspower = tonumber(v[2])
  2221. elseif key == 2 then
  2222. end_time = tonumber(v[2])
  2223. elseif key == 3 then
  2224. boss_id = tonumber(v[2])
  2225. elseif key == 4 then
  2226. dun_id = tonumber(v[2])
  2227. elseif key == 5 then
  2228. status = tonumber(v[2])
  2229. end
  2230. end
  2231. end
  2232. end
  2233. return bosspower, end_time, boss_id, dun_id, status
  2234. end
  2235. --社团协助列表增删(封印裂隙40811)
  2236. function GuildModel:UpdateGuildSupportInfo(vo)
  2237. -- print("==WQ==:UpdateGuildSupportInfo [start:2039] self.guild_support_info:", self.guild_support_info)
  2238. -- PrintTable(self.guild_support_info)
  2239. -- print("==WQ==:GuildModel [end]")
  2240. if vo.type == 1 then--新增协助
  2241. --先防止加入相同id的协助
  2242. local have_same = false
  2243. for k,v in pairs(self.guild_support_info) do
  2244. if v.support_sid == vo.support_sid then
  2245. break
  2246. end
  2247. end
  2248. if have_same then return end
  2249. --把新增的数据插入进去
  2250. vo.type = nil
  2251. table.insert(self.guild_support_info,vo)
  2252. elseif vo.type == 2 then--删除协助
  2253. if vo.support_sid == 0 then--如果id是0,则要把列表中所有的封印裂隙协助删除
  2254. for k,v in pairs(self.guild_support_info) do
  2255. if v.support_cfg_id == 2 then
  2256. self.guild_support_info[k] = nil
  2257. end
  2258. end
  2259. else
  2260. for k,v in pairs(self.guild_support_info) do
  2261. if v.support_sid == vo.support_sid then
  2262. self.guild_support_info[k] = nil
  2263. break
  2264. end
  2265. end
  2266. end
  2267. end
  2268. self:Fire(GuildModel.UPDATE_GUILD_COLLECT_SUPPORT_INFO_LIST)
  2269. end
  2270. --设置自己当前协助唯一ID 40046
  2271. function GuildModel:SetSelfGuildSupportId( self_support_sid )
  2272. self.self_support_sid = self_support_sid
  2273. end
  2274. function GuildModel:GetSelfGuildSupportId( )
  2275. return self.self_support_sid
  2276. end
  2277. --协助状态 40046
  2278. function GuildModel:SetGuildSupportStatus( value )
  2279. self.self_support_status = value
  2280. end
  2281. function GuildModel:GetGuildSupportStatus( )
  2282. return self.self_support_status
  2283. end
  2284. --获得自己当前玩法的协助配置ID
  2285. function GuildModel:GetSelfServerSupportCfgId( )
  2286. local list = self:GetGuildSupportInfo()
  2287. local self_id = self:GetSelfGuildSupportId()
  2288. for i,v in ipairs(list) do
  2289. if v.support_sid == self_id then
  2290. return v.support_cfg_id
  2291. end
  2292. end
  2293. end
  2294. --获取当前自己的协助他人要攻击的 boss_id
  2295. function GuildModel:GetGuildSupportBossId( )
  2296. local boss_id = 0
  2297. local support_info = self:GetCurSupportPlayerInfo( )
  2298. if support_info then
  2299. return support_info.boss_id
  2300. end
  2301. return boss_id
  2302. end
  2303. --设置个人协助奖励 40047
  2304. function GuildModel:SetGuildSupportAwardInfo( scmd )
  2305. if not self.guild_support_award_info then self.guild_support_award_info = {} end
  2306. self.guild_support_award_info[#self.guild_support_award_info + 1] = scmd
  2307. end
  2308. function GuildModel:GetGuildSupportAwardInfo( )
  2309. return self.guild_support_award_info[1]
  2310. end
  2311. --当前感谢的礼包唯一ID 40048
  2312. function GuildModel:SetGuildSupportThankId( guild_support_thank_cfg_id )
  2313. self.guild_support_thank_cfg_id = guild_support_thank_cfg_id
  2314. end
  2315. --得到感谢的礼包唯一ID
  2316. function GuildModel:GetGuildSupportThankId( )
  2317. return self.guild_support_thank_cfg_id
  2318. end
  2319. --当前感谢界面信息 40049
  2320. function GuildModel:SetGuildSupportThankInfo( scmd )
  2321. self.guild_support_thank_info = scmd
  2322. end
  2323. --当前感谢界面信息
  2324. function GuildModel:GetGuildSupportThankInfo( )
  2325. return self.guild_support_thank_info
  2326. end
  2327. --设置玩家每日获得的名望券 40046(弃用20200817)
  2328. function GuildModel:SetDaliyReputation( guild_daliy_reputation )
  2329. -- if not self.guild_daliy_reputation then
  2330. -- self.guild_daliy_reputation = guild_daliy_reputation
  2331. -- else
  2332. -- if guild_daliy_reputation > self.guild_daliy_reputation then
  2333. -- local goods_name = GoodsModel:getInstance():getGoodsName(Config.ConfigNotNormalGoods[4].goods_id)
  2334. -- local str = string.format("%s增加<color=#10aaf1>%s</color>",goods_name,guild_daliy_reputation - self.guild_daliy_reputation)
  2335. -- -- Message.show(str)
  2336. -- end
  2337. -- self.guild_daliy_reputation = guild_daliy_reputation
  2338. -- end
  2339. end
  2340. -- 根据协议返回的协助唯一id,判断是否可以弹出拼单感谢界面
  2341. function GuildModel:ShowGuildSpellListThankView(support_id, option_type)
  2342. self.cur_guild_spelllist_thankId = support_id or self.cur_guild_spelllist_thankId
  2343. if not self.cur_guild_spelllist_thankId then return end
  2344. -- 是否在社团拼单界面,不是则什么也不操作
  2345. if not self._is_in_guild_spelllist_view then
  2346. return
  2347. end
  2348. -- 根据唯一协助id获取相应类型的支援数据
  2349. local support_data = self:GetSupportThankDataByTypeAndId(GuildModel.SupportThankType.SpellList, self.cur_guild_spelllist_thankId)
  2350. if support_data then
  2351. self:Fire(GuildModel.OPEN_GUILD_SL_THANK_VIEW, true, support_data)
  2352. end
  2353. end
  2354. -- 清除当前缓存的缓存感谢协助id
  2355. function GuildModel:ClearGuildSpellListCurSupportThankId( )
  2356. self.cur_guild_spelllist_thankId = nil
  2357. end
  2358. --获得协助玩家信息
  2359. function GuildModel:GetCurSupportPlayerInfo( )
  2360. local self_support_sid = self:GetSelfGuildSupportId()
  2361. local info = self:GetGuildSupportInfo()
  2362. for k,v in pairs(info) do
  2363. if v.support_sid == self_support_sid then
  2364. return v
  2365. end
  2366. end
  2367. end
  2368. --设置协助感谢列表
  2369. function GuildModel:SetSupportThankList( list )
  2370. self.support_thank_list = {}
  2371. local no_send_list = {}
  2372. local is_send_list = {}
  2373. local red_bool = false
  2374. if #list > 0 then
  2375. for i,v in ipairs(list) do
  2376. if v.is_send == 1 then
  2377. is_send_list[#is_send_list + 1] = v
  2378. else
  2379. no_send_list[#no_send_list + 1] = v
  2380. end
  2381. end
  2382. local sort_func = function ( a, b )--最新的要排在最前面
  2383. return a.support_id > b.support_id
  2384. end
  2385. if #no_send_list > 0 then
  2386. if #no_send_list > 1 then
  2387. table.sort(no_send_list, sort_func)
  2388. end
  2389. for i,v in ipairs(no_send_list) do
  2390. self.support_thank_list[#self.support_thank_list + 1] = v
  2391. end
  2392. red_bool = true
  2393. end
  2394. if #is_send_list > 0 then
  2395. if #is_send_list > 1 then
  2396. table.sort(is_send_list, sort_func)
  2397. end
  2398. for i,v in ipairs(is_send_list) do
  2399. self.support_thank_list[#self.support_thank_list + 1] = v
  2400. end
  2401. end
  2402. end
  2403. self.support_red_list[GuildModel.SupportTab.Thank] = red_bool
  2404. self:UpdateSupportMainIconRedDot()
  2405. -- 检查当前是否可以弹出感谢界面
  2406. self:ShowGuildSpellListThankView()
  2407. self:Fire(GuildModel.UPDATE_SUPPORT_THANK_LIST)
  2408. end
  2409. --获得协助感谢列表
  2410. function GuildModel:GetSupportThankList( )
  2411. return self.support_thank_list
  2412. end
  2413. -- 根据指定类型和协助id获取协助数据
  2414. function GuildModel:GetSupportThankDataByTypeAndId(type, support_id)
  2415. if type and support_id then
  2416. for k, v in pairs(self.support_thank_list) do
  2417. if v.type == type and v.support_id == support_id then
  2418. return v
  2419. end
  2420. end
  2421. end
  2422. return nil
  2423. end
  2424. --设置协助感谢领取列表
  2425. function GuildModel:SetSupportGiftList( list )
  2426. self.support_gift_list = {}
  2427. local no_get_list = {}
  2428. local is_get_list = {}
  2429. local red_bool = false
  2430. if #list > 0 then
  2431. for i,v in ipairs(list) do
  2432. if v.is_get == 1 then
  2433. is_get_list[#is_get_list + 1] = v
  2434. else
  2435. no_get_list[#no_get_list + 1] = v
  2436. end
  2437. end
  2438. local sort_func = function ( a, b )--最新的要排在最前面
  2439. return a.support_id > b.support_id
  2440. end
  2441. if #no_get_list > 0 then
  2442. if #no_get_list > 1 then
  2443. table.sort(no_get_list, sort_func)
  2444. end
  2445. for i,v in ipairs(no_get_list) do
  2446. self.support_gift_list[#self.support_gift_list + 1] = v
  2447. end
  2448. red_bool = true
  2449. end
  2450. if #is_get_list > 0 then
  2451. if #is_get_list > 1 then
  2452. table.sort(is_get_list, sort_func)
  2453. end
  2454. for i,v in ipairs(is_get_list) do
  2455. self.support_gift_list[#self.support_gift_list + 1] = v
  2456. end
  2457. end
  2458. end
  2459. self.support_red_list[GuildModel.SupportTab.Gift] = red_bool
  2460. self:UpdateSupportMainIconRedDot()
  2461. self:Fire(GuildModel.UPDATE_SUPPORT_GIFT_LIST)
  2462. end
  2463. --获得协助感谢列表
  2464. function GuildModel:GetSupportGiftList( )
  2465. return self.support_gift_list
  2466. end
  2467. --更新协助主界面icon红点
  2468. function GuildModel:UpdateSupportMainIconRedDot( )
  2469. local red_bool = false
  2470. for i,v in pairs(self.support_red_list) do
  2471. if v then
  2472. red_bool = true
  2473. break
  2474. end
  2475. end
  2476. if self.support_red_list[GuildModel.SupportTab.List] and RoleManager.Instance.mainRoleInfo.level >= 96 and not self.support_is_self_send then--自己发的不需要SOS
  2477. MsgManager:getInstance():Add({type=Config.ConfigMainIcon.TipType.support},have_red)
  2478. else
  2479. MsgManager:getInstance():Remove(Config.ConfigMainIcon.TipType.support)
  2480. end
  2481. if self.support_red_list[GuildModel.SupportTab.Thank] then
  2482. else
  2483. self:Fire(GuildModel.CLOSE_GUILD_SUPPORT_TIP_VIEW)
  2484. end
  2485. GlobalEventSystem:Fire(EventName.REFRESH_MAIN_UI_SUPPORT_RED_DOT, red_bool)
  2486. if self.support_is_self_send then
  2487. self.support_is_self_send = false
  2488. end
  2489. end
  2490. -- 本国团战相关协议 start
  2491. -- 设置本轮团战与玩家对战的社团信息 41001
  2492. function GuildModel:SetCSGRFightInfo(vo)
  2493. self.csgr_fight_info = vo.arena_list[1]
  2494. -- 置顶自己的社团
  2495. local guild_id = RoleManager.Instance.mainRoleInfo.guild_id
  2496. local sort_func = function ( a, b )
  2497. if a.guild_id ~= guild_id and b.guild_id ~= guild_id then
  2498. return a.guild_id < b.guild_id
  2499. else
  2500. return a.guild_id == guild_id
  2501. end
  2502. end
  2503. if self.csgr_fight_info and self.csgr_fight_info.guilds then
  2504. table.sort(self.csgr_fight_info.guilds, sort_func)
  2505. end
  2506. end
  2507. function GuildModel:GetCSGRFightInfo( )
  2508. return self.csgr_fight_info
  2509. end
  2510. -- 更新本国团战采集buff信息 41003
  2511. function GuildModel:SetCSGRCollectBuffs(vo)
  2512. if not vo then return end
  2513. self.csgr_collect_buff = {}
  2514. for k, v in ipairs(vo.buff_goods) do
  2515. self.csgr_collect_buff[v.attr_id] = v
  2516. end
  2517. end
  2518. function GuildModel:GetCSGRCollectBuffs(attr_id)
  2519. if not attr_id then
  2520. return self.csgr_collect_buff
  2521. else
  2522. return self.csgr_collect_buff[attr_id]
  2523. end
  2524. end
  2525. -- 更新本国团战战场物资信息 41004
  2526. function GuildModel:SetCSGRBattlefieldRes(vo)
  2527. if not vo then return end
  2528. self.csgr_bf_res = {}
  2529. for k, v in ipairs(vo.resources) do
  2530. self.csgr_bf_res[v.attr_id] = v
  2531. end
  2532. self.csgr_bf_res_refreshtime = vo.next_time
  2533. end
  2534. function GuildModel:GetCSGRBattlefieldRes(attr_id)
  2535. if not attr_id then
  2536. return self.csgr_bf_res
  2537. else
  2538. return self.csgr_bf_res[attr_id]
  2539. end
  2540. end
  2541. function GuildModel:GetCSGRBattlefieldResRefreshTime( )
  2542. return self.csgr_bf_res_refreshtime
  2543. end
  2544. -- 筛选出距离玩家最近的坐标点前往
  2545. function GuildModel:CSGRAutoFindCollection(vo)
  2546. if not vo then return end
  2547. local scene_mgr = SceneManager:getInstance()
  2548. if not scene_mgr:IsGuildCSGRScene() then return end
  2549. local getDistance = GameMath.GetDistance
  2550. local main_vo = Scene:getInstance():GetMainRole()
  2551. local x, y = main_vo:GetRealPos()
  2552. local min_dis, temp_dis, min_dis_pos
  2553. -- 算出距离玩家坐标最短的坐标点
  2554. for k, attr_pos in ipairs(vo.coordinates) do
  2555. temp_dis = getDistance(x, y, attr_pos.x, attr_pos.y, false)
  2556. if not min_dis or min_dis > temp_dis then
  2557. min_dis = temp_dis
  2558. min_dis_pos = attr_pos
  2559. end
  2560. end
  2561. if min_dis_pos then
  2562. local function call_back()
  2563. GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT)
  2564. end
  2565. local findVo = FindVo.New()
  2566. findVo.type = FindVo.MONSTER
  2567. findVo.x = min_dis_pos.x / SceneObj.LogicRealRatio.x
  2568. findVo.y = min_dis_pos.y / SceneObj.LogicRealRatio.y
  2569. findVo.sceneId = scene_mgr:GetSceneId()
  2570. findVo.id = vo.attr_id
  2571. findVo.call_back = call_back
  2572. GlobalEventSystem:Fire(EventName.FIND, findVo)
  2573. end
  2574. end
  2575. -- 本国团战结算信息 41007
  2576. function GuildModel:SetGuildCSGRResultData(vo)
  2577. self.guild_csgr_result_data = vo
  2578. end
  2579. function GuildModel:GetGuildCSGRResultData( )
  2580. return self.guild_csgr_result_data
  2581. end
  2582. -- 本国团战相关协议 end
  2583. --------- 社团协议相关代码 end ---------
  2584. --------- 社团红点提醒相关代码 start ---------
  2585. -- 设置社团申请的状态 11016
  2586. function GuildModel:SetApplyRedPointState(apply_pos)
  2587. -- 通过这个标志量可以不请求社团申请信息直接展示社团申请的红点
  2588. self.member_refresh_check = true
  2589. if apply_pos == 0 then
  2590. if not self.member_apply_red then
  2591. self:Fire(GuildModel.REQUEST_CCMD_EVENT, 40008) -- 请求申请列表
  2592. end
  2593. else
  2594. if not self.pos_apply_red and self:HasAppointPremission(apply_pos) then
  2595. self:Fire(GuildModel.REQUEST_CCMD_EVENT, 40008) -- 请求申请列表
  2596. end
  2597. end
  2598. end
  2599. -- 2020年1月10日修改:统一红点的规则框架,只需要加载两次,数据不更新的情况下获取缓存即可
  2600. function GuildModel:CheckGuildRedDotAll( )
  2601. -- 社团的红点一律需要判断是否加入了社团
  2602. local joined_guild = RoleManager.Instance.mainRoleInfo.guild_id ~= 0
  2603. self.guild_red_cache[Config.ConfigGuild.TabId.MainInfo] = joined_guild and self:CheckGuildInfoRedDot()
  2604. self.guild_red_cache[Config.ConfigGuild.TabId.List] = joined_guild and self:CheckGuildListRedDot()
  2605. self.guild_red_cache[Config.ConfigGuild.TabId.Active] = joined_guild and self:CheckGuildActiveRed()
  2606. self.guild_red_cache[Config.ConfigGuild.TabId.Order] = joined_guild and self:CheckGuildOrderRed()
  2607. self.guild_red_cache[Config.ConfigGuild.TabId.Shop] = joined_guild and self:CheckGuildShopRed()
  2608. -- self.guild_red_cache[Config.ConfigGuild.TabId.Event] = joined_guild and self:CheckGuildEventRed()
  2609. self.guild_red_cache[Config.ConfigGuild.TabId.Event] = false
  2610. self:CheckGuildMainIconRed()
  2611. end
  2612. -- 获取社团红点缓存
  2613. function GuildModel:GetGuildRedDotCache( view_type )
  2614. return not view_type and self.guild_red_cache or self.guild_red_cache[view_type]
  2615. end
  2616. -- 检查社团模块红点 view_type:界面类型
  2617. function GuildModel:CheckGuildRedDot(view_type, is_all)
  2618. local bool = false
  2619. if view_type == Config.ConfigGuild.TabId.MainInfo then -- 社团主界面信息页签
  2620. bool = self:CheckGuildInfoRedDot()
  2621. elseif view_type == Config.ConfigGuild.TabId.List then -- 社团列表页签
  2622. bool = self:CheckGuildListRedDot()
  2623. elseif view_type == Config.ConfigGuild.TabId.Active then -- 社团活跃页签
  2624. bool = self:CheckGuildActiveRed()
  2625. elseif view_type == Config.ConfigGuild.TabId.Order then -- 社团拼单页签
  2626. bool = self:CheckGuildOrderRed()
  2627. elseif view_type == Config.ConfigGuild.TabId.Shop then -- 社团商店页签
  2628. bool = self:CheckGuildShopRed()
  2629. elseif view_type == Config.ConfigGuild.TabId.Event then -- 社团活动页签
  2630. -- bool = self:CheckGuildEventRed()
  2631. self:CheckGuildEventRed() --检测红点 但不使用红点,检测红点只给活动页签"进行中"标志使用
  2632. bool = false
  2633. end
  2634. -- 社团的红点一律需要判断是否加入了社团
  2635. local guild_id = RoleManager.Instance.mainRoleInfo.guild_id
  2636. self.guild_red_cache[view_type] = bool and guild_id ~= 0
  2637. self:Fire(GuildModel.UPDATE_RED_DOT_BY_TYPE, view_type)
  2638. if is_all then
  2639. self:CheckGuildMainIconRed()
  2640. end
  2641. return bool
  2642. end
  2643. function GuildModel:CheckGuildMainIconRed( )
  2644. local show = false
  2645. for k,v in pairs(self.guild_red_cache) do
  2646. if v == true then
  2647. show = v
  2648. break
  2649. end
  2650. end
  2651. GlobalEventSystem:Fire(EventName.SHOW_FUNCTION_RED_POINT, 400, show) --通知自己功能按钮红点
  2652. end
  2653. --检查主页信息红点
  2654. function GuildModel:CheckGuildInfoRedDot()
  2655. local red_packet_red = RedPacketModel:GetInstance():GetGuildRedPacketRed()
  2656. local merge_tip_red = self:CheckGuildMergeTipRed()
  2657. return red_packet_red or merge_tip_red
  2658. end
  2659. -- 检查社团低活跃情况时的合并提示
  2660. function GuildModel:CheckGuildMergeTipRed( )
  2661. self.merge_tip_red = false
  2662. if self:HasOperatePermission(GuildModel.MgrPermission.MergeGuild) then -- 有合并权限的玩家才可以显示红点
  2663. local cookie_warpper = CookieWrapper.Instance
  2664. local next_tip_time = cookie_warpper:GetCookie(CookieLevelType.Account, CookieKey.GUILD_NEXT_MERGE_TIP_TIME)
  2665. local cur_time = TimeUtil:getServerTime()
  2666. if not next_tip_time or next_tip_time < cur_time then
  2667. -- 如果需要更新缓存,就代表玩家查看过合并界面,到下一个时间段之前都不会处理合并提示的红点
  2668. if self.save_merge_cache_time then
  2669. local cur_time_data = os.date("*t", cur_time)
  2670. cur_time_data.hour = 0
  2671. cur_time_data.min = 0
  2672. cur_time_data.sec = 0
  2673. -- 低活跃刷新的时间分别时周一和周五,需要推算今日零点距离下一次低活跃刷新的秒数时间缓存起来
  2674. local cur_wday = cur_time_data.wday - 1 -- 值域1~7,周日是1,-1做正常映射,周日特殊处理
  2675. local off_wday
  2676. if cur_time_data.wday >= 1 and cur_wday < 5 then -- 以周五为节点
  2677. off_wday = 5 - cur_wday
  2678. else -- 以下周一为节点
  2679. off_wday = 1 - cur_wday + (cur_wday > 0 and 7 or 0)
  2680. end
  2681. local today_0_clock = os.time(cur_time_data)
  2682. next_tip_time = today_0_clock + off_wday * 86400 - 1
  2683. cookie_warpper:SaveCookie(CookieLevelType.Account, CookieTimeType.TYPE_ALWAYS, CookieKey.GUILD_NEXT_MERGE_TIP_TIME, next_tip_time)
  2684. cookie_warpper:WriteAll()
  2685. else -- 不更新时间缓存以及到了下一个结算时间段的情况,就刷新红点状态
  2686. local merge_condition = self:GetGuildMergeConditionCfg()
  2687. if merge_condition and merge_condition.open == 1 then
  2688. local basic_info = self:GetGuildBaseInfo()
  2689. local guild_division = basic_info and basic_info.division or 0
  2690. local division_lv_list = stringtotable(merge_condition.merge_lv)
  2691. local can_merge = false
  2692. for k,v in pairs(division_lv_list) do
  2693. if v == guild_division then
  2694. can_merge = true
  2695. end
  2696. end
  2697. self.merge_tip_red = can_merge
  2698. end
  2699. end
  2700. end
  2701. end
  2702. return self.merge_tip_red
  2703. end
  2704. function GuildModel:GetGuildMergeTipRed( )
  2705. return self.merge_tip_red
  2706. end
  2707. function GuildModel:SetGuildSaveMergeCacheTimeFlag(bool)
  2708. local need_refresh = self.save_merge_cache_time ~= bool
  2709. self.save_merge_cache_time = bool
  2710. if need_refresh then -- 状态变化,刷新红点
  2711. self:CheckGuildRedDot(Config.ConfigGuild.TabId.MainInfo, true)
  2712. end
  2713. end
  2714. -- 检查列表页签红点
  2715. function GuildModel:CheckGuildListRedDot( )
  2716. local bool = self:CheckGuildListApplyRed()
  2717. return bool
  2718. end
  2719. -- 获取社团人员管理红点
  2720. function GuildModel:CheckGuildListApplyRed( )
  2721. -- 社团申请的红点需要管理才可以操作
  2722. -- 入团申请红点,需要拥有审批入会权限
  2723. self.member_apply_red = #self.apply_guild_list > 0
  2724. and self:HasOperatePermission(GuildModel.MgrPermission.PassJoinApply) or false
  2725. -- 职位申请红点,需要逐个判断
  2726. self.pos_apply_red = false
  2727. for k, v in ipairs(self.apply_pos_list) do
  2728. if self:HasAppointPremission(v.position) then
  2729. self.pos_apply_red = true
  2730. break
  2731. end
  2732. end
  2733. -- 社团合并红点
  2734. self.member_merge_red = self.guild_merge_info and #self.guild_merge_info.fapplys > 0
  2735. and self:HasOperatePermission(GuildModel.MgrPermission.MergeGuild) or false -- 接收方才需要红点
  2736. -- 申请入团和职位以及合并请求的红点,在关闭申请管理界面后消除
  2737. return (self.member_apply_red or self.pos_apply_red or self.member_merge_red) and self.member_refresh_check
  2738. end
  2739. -- 获取入团申请,职位申请和合并申请按钮的红点
  2740. function GuildModel:GetGuildMemberApplyRed( )
  2741. return self.member_apply_red
  2742. end
  2743. function GuildModel:GetGuildPosApplyRed( )
  2744. return self.pos_apply_red
  2745. end
  2746. function GuildModel:GetGuildMemberMergeRed( )
  2747. return self.member_merge_red
  2748. end
  2749. function GuildModel:CheckMemberRedDot( )
  2750. if self.member_refresh_check then
  2751. self.member_refresh_check = false
  2752. self:CheckGuildRedDot(Config.ConfigGuild.TabId.List, true)
  2753. end
  2754. end
  2755. -- 获取社团活跃红点
  2756. function GuildModel:CheckGuildActiveRed()
  2757. local bool = self:GetGuildActiveProgressRed()
  2758. bool = bool or self:CheckGuildActiveTaskRed()
  2759. return bool
  2760. end
  2761. -- 获取社团活跃社团进度奖励红点
  2762. function GuildModel:GetGuildActiveProgressRed(id)
  2763. -- 若个人活跃没有达到阈值则直接false
  2764. local p_active_require = self:GetGuildKvByKey("min_active_require").val
  2765. if p_active_require > self.personal_active then return false end
  2766. -- 获取活跃配置以及当前相应的活跃值和活跃阶段
  2767. local act_cfg = self:GetActiveRewardCfg()
  2768. local bool = false
  2769. for k, v in ipairs(act_cfg) do
  2770. if v.id == self.guild_active_stage + 1 and self.guild_active >= v.need then -- 当前阶段是已领取阶段的下一阶段,且超过了该阶段需要的活跃值
  2771. bool = id == nil or v.id == id
  2772. break
  2773. end
  2774. end
  2775. return bool
  2776. end
  2777. -- 获取社团活跃任务红点
  2778. function GuildModel:CheckGuildActiveTaskRed( )
  2779. -- 获取玩家当前活跃任务的领取情况
  2780. local bool = false
  2781. local active_task_progress = self:GetGuildActiveTaskData()
  2782. for k, v in pairs(active_task_progress) do
  2783. if v.state == 1 then -- 可领取
  2784. bool = true
  2785. break
  2786. end
  2787. end
  2788. return bool
  2789. end
  2790. -- 获取社团拼单页签红点
  2791. function GuildModel:CheckGuildOrderRed( )
  2792. -- 暂时屏蔽次数红点
  2793. if not self.guild_order_login_red then return false end
  2794. local sl_data = self:GetGuildSpellListData()
  2795. local total_num = self:GetGuildKvByKey("accept_limit").val
  2796. -- 有剩余次数就给红点
  2797. if sl_data and total_num - sl_data.ordered > 0 then
  2798. return true
  2799. else
  2800. -- 没有拼单的红点的话,登录红点也不需要存在了
  2801. self.guild_order_login_red = false
  2802. return false
  2803. end
  2804. -- return self.guild_order_login_red and sl_data and total_num - sl_data.ordered > 0 or false
  2805. end
  2806. -- 检查商店红点
  2807. function GuildModel:CheckGuildShopRed( )
  2808. local guild_coin = RoleManager.Instance.mainRoleInfo.guild_contribute
  2809. local coin_threashold = self:GetGuildKvByKey("store_reddot").val
  2810. local goods_list = self:GetGuildShopGoodsList()
  2811. -- 判断当前是否有龙神券可购买
  2812. self.guild_shop_special_item_red = {}
  2813. local can_buy_capsule_ticket = false
  2814. local can_buy_goods = false -- 存在可购买的道具
  2815. if goods_list and TableSize(goods_list) > 0 then
  2816. for k, v in pairs(goods_list) do
  2817. if v.id == 1 then -- 龙神单抽券
  2818. if v.can_buy then -- 可以购买
  2819. local cost_cfg = stringtotable(v.cost)[1]
  2820. can_buy_capsule_ticket = cost_cfg[3] <= guild_coin
  2821. self.guild_shop_special_item_red[v.id] = can_buy_capsule_ticket
  2822. end
  2823. -- break
  2824. can_buy_goods = can_buy_goods or v.can_buy
  2825. end
  2826. end
  2827. end
  2828. -- 当存在龙神单抽券可购买 或 社团货币超过提示的值且允许显示超过值的阈值 则 给红点
  2829. return can_buy_capsule_ticket or ((guild_coin >= coin_threashold) and can_buy_goods and self.show_guild_shop_red) or false
  2830. end
  2831. function GuildModel:GetGuildShopSpecialItemRedById(id)
  2832. return self.guild_shop_special_item_red[id] or false
  2833. end
  2834. -- 检查社团活动红点
  2835. function GuildModel:CheckGuildEventRed( )
  2836. local bool = false
  2837. for k, v in pairs(self.guild_event_tab_red) do
  2838. bool = v or bool
  2839. end
  2840. return bool
  2841. end
  2842. function GuildModel:GetGuildEventTabRed(type)
  2843. return type and self.guild_event_tab_red[type] or false
  2844. end
  2845. --------- 社团红点提醒相关代码 end ---------
  2846. --------- 社团数据获取相关代码 start ---------
  2847. -- 获取社团信息界面用的社团成员信息
  2848. function GuildModel:GetGuildMemberListForInfoView( )
  2849. local tb = {}
  2850. local role_id = RoleManager.Instance.mainRoleInfo.role_id
  2851. local role_data = nil
  2852. for k, v in pairs(self.member_list) do
  2853. -- 筛选出玩家数据
  2854. if v.role_id ~= role_id then
  2855. tb[#tb+1] = v
  2856. else
  2857. role_data = v
  2858. end
  2859. end
  2860. local sort_func = function ( a, b )
  2861. if a.online_flag ~= b.online_flag then
  2862. -- if a.online_flag == 1 then -- 在线置顶
  2863. -- return true
  2864. -- elseif b.online_flag == 1 then
  2865. -- return false
  2866. -- else
  2867. return a.online_flag > b.online_flag
  2868. -- end
  2869. else
  2870. return a.power > b.power
  2871. end
  2872. end
  2873. table.sort(tb, sort_func)
  2874. -- 玩家数据前置
  2875. if role_data then
  2876. table.insert(tb, 1, role_data)
  2877. end
  2878. return tb
  2879. end
  2880. -- 获取社团信息界面用的社团成员信息
  2881. -- s_type : 特殊类型 不传则什么也不做 1 社团拼单邀请,需要加一个假人数据
  2882. function GuildModel:GetGuildMemberListForInviteView(s_type)
  2883. local tb = {}
  2884. local role_id = RoleManager.Instance.mainRoleInfo.role_id
  2885. for k, v in pairs(self.member_list) do
  2886. -- 筛选出玩家数据
  2887. if v.role_id ~= role_id then
  2888. tb[#tb+1] = v
  2889. end
  2890. end
  2891. local sort_func = function ( a, b )
  2892. if a.online_flag ~= b.online_flag then
  2893. return a.online_flag > b.online_flag
  2894. else
  2895. return a.power > b.power
  2896. end
  2897. end
  2898. table.sort(tb, sort_func)
  2899. if s_type then
  2900. if s_type == 1 then -- 社团拼单添加假人
  2901. local has_inserted = false
  2902. local fake_role = {
  2903. role_id = 1,
  2904. vip_flag = 0,
  2905. sup_vip_type = 0,
  2906. name = "社团助手",
  2907. }
  2908. for k, v in ipairs(tb) do
  2909. if v.online_flag == 0 then -- 检查到这个位置是离线玩家,则插入数据
  2910. table.insert(tb, k, fake_role)
  2911. has_inserted = true
  2912. break
  2913. end
  2914. end
  2915. if not has_inserted then -- 如果上面没有插入社团ai数据,则在这边补充
  2916. table.insert(tb, fake_role)
  2917. end
  2918. end
  2919. end
  2920. return tb
  2921. end
  2922. -- 获取对应职位的玩家信息
  2923. function GuildModel:GetMemberDataByPosition(position)
  2924. local tb = {}
  2925. for k, v in pairs(self.member_list) do
  2926. if v.position == position then
  2927. tb[#tb+1] = v
  2928. end
  2929. end
  2930. return tb
  2931. end
  2932. -- 踢出玩家后,前端自行处理本地社团成员缓存
  2933. function GuildModel:UpdateMemberAfterKick(kick_id)
  2934. for k, v in pairs(self.member_list) do
  2935. if v.role_id == kick_id then
  2936. table.remove(self.member_list, k)
  2937. break
  2938. end
  2939. end
  2940. end
  2941. -- 根据社团等级获取对应特殊职位的人数
  2942. function GuildModel:GetPositionNum( position )
  2943. if not position then return 0 end
  2944. if position == GuildModel.GuildPosition.Agency then return 1 end
  2945. local guild_lv = self.base_info.guild_lv or 1
  2946. for k, cfg in pairs(Config.Guildlv) do
  2947. if cfg.lv == guild_lv then
  2948. local pos_list = stringtotable(cfg.pos_list)
  2949. for k2, pos_data in pairs(pos_list) do
  2950. if pos_data[1] == position then
  2951. return pos_data[2]
  2952. end
  2953. end
  2954. end
  2955. end
  2956. return 0
  2957. end
  2958. -- 根据目标职位获取申请人列表
  2959. function GuildModel:GetPositionApplyList(position)
  2960. local tb = {}
  2961. if position then
  2962. for k, v in ipairs(self.apply_member_list) do
  2963. if v.position == position then
  2964. tb[#tb+1] = v
  2965. end
  2966. end
  2967. end
  2968. return tb
  2969. end
  2970. --创建花火大会客户端怪物
  2971. function GuildModel:CreateGuildPartyMonster( )
  2972. if not self.feast_monster_vo then
  2973. self.feast_monster_vo = MonsterVo.New()
  2974. self.feast_monster_vo.instance_id = GuildModel.FEAST_MONSTER_INSTANCE_ID
  2975. self.feast_monster_vo.type_id = self:GetGuildKvByKey("ballroom").val
  2976. local cfg_data = ConfigItemMgr.Instance:GetMonsterDataItem(self.feast_monster_vo.type_id)
  2977. if cfg_data then
  2978. self.feast_monster_vo.monster_res = cfg_data.icon
  2979. self.feast_monster_vo.name = cfg_data.name
  2980. self.feast_monster_vo.type = 0
  2981. self.feast_monster_vo.move_speed = cfg_data.speed
  2982. self.feast_monster_vo.icon_scale = 5--tonumber(cfg_data.icon_scale)
  2983. end
  2984. self.feast_monster_vo:SetBasePropertyFromConfig()
  2985. local mon_pos = stringtotable(self:GetGuildKvByKey("ballroom_position").val)[1]
  2986. self.feast_monster_vo.pos_x = mon_pos[1]
  2987. self.feast_monster_vo.pos_y = mon_pos[2]
  2988. if self.feast_monster_vo.monster_res == 0 then
  2989. return --暂时没处理
  2990. end
  2991. self.feast_monster_vo.level = 1
  2992. self.feast_monster_vo.hp=1
  2993. self.feast_monster_vo.mp=1
  2994. self.feast_monster_vo.maxHp=1
  2995. self.feast_monster_vo.maxMp=1
  2996. self.feast_monster_vo.guaji_flag = 1
  2997. self.feast_monster_vo.hide_flag = false
  2998. self.feast_monster_vo.can_attack = 0
  2999. self.feast_monster_vo.can_pick = 0
  3000. self.feast_monster_vo.is_hide_nameboard = true
  3001. self.feast_monster_vo.is_client_monster = true --是否是客户端怪物
  3002. self.feast_monster_vo.client_default_action = "close"
  3003. local info = self.feast_info
  3004. if info and info.status == 1 then
  3005. self.feast_monster_vo.client_default_action = "open"
  3006. self.feast_monster_vo.client_default_speed = 0.3
  3007. end
  3008. SceneManager.Instance:AddMonsterVo(self.feast_monster_vo, false)
  3009. end
  3010. end
  3011. function GuildModel:DeleteGuildPartyMonster( )
  3012. self.feast_monster_vo = nil
  3013. SceneManager.Instance:DeleteClientMonstersByInstanceId(GuildModel.FEAST_MONSTER_INSTANCE_ID)
  3014. end
  3015. -- 根据目标职位和战力及活跃条件获取社团成员列表(社团职位分配界面用)
  3016. -- sort_type 12战力排序规则:1降序 2升序 34活跃排序规则:3降序 4升序
  3017. function GuildModel:GetMemDataByPosAndSortCondition(pos, sort_type)
  3018. local mem_list = DeepCopy(self:GetGuildMemberList())
  3019. -- 缓存各种排序规则
  3020. local sort_func_list = {
  3021. [1] = function (a, b)
  3022. return a.power > b.power
  3023. end,
  3024. [2] = function (a, b)
  3025. return a.power < b.power
  3026. end,
  3027. [3] = function (a, b)
  3028. return a.total_labor > b.total_labor
  3029. end,
  3030. [4] = function (a, b)
  3031. return a.total_labor < b.total_labor
  3032. end,
  3033. }
  3034. local type_func = sort_func_list[sort_type]
  3035. local sort_func = function ( a, b )
  3036. if a.position == pos and b.position ~= pos then
  3037. return true
  3038. elseif a.position ~= pos and b.position == pos then
  3039. return false
  3040. else
  3041. return type_func(a, b)
  3042. end
  3043. end
  3044. table.sort(mem_list, sort_func)
  3045. return mem_list
  3046. end
  3047. -- 根据玩家的离线情况和战斗力排序 type:1战力降序 2战力升序 3在线在前战力降序 4离线在前战力降
  3048. function GuildModel:GetMemDataByOnlineAndPower(type)
  3049. local mem_list = DeepCopy(self:GetGuildMemberList())
  3050. -- 缓存各种排序规则
  3051. local sort_func_list = {
  3052. [1] = function (a, b)
  3053. return a.power > b.power
  3054. end,
  3055. [2] = function (a, b)
  3056. return a.power < b.power
  3057. end,
  3058. [3] = function (a, b)
  3059. if a.online_flag ~= b.online_flag then
  3060. return a.online_flag == 1
  3061. -- if a.online_flag == 1 then -- 在线置顶
  3062. -- return true
  3063. -- elseif b.online_flag == 1 then
  3064. -- return false
  3065. -- else
  3066. -- return a.online_flag > b.online_flag
  3067. -- end
  3068. else
  3069. return a.power > b.power
  3070. end
  3071. end,
  3072. [4] = function (a, b)
  3073. if a.online_flag ~= b.online_flag then
  3074. return a.online_flag == 0
  3075. -- if a.online_flag == 0 then -- 在线置顶
  3076. -- return true
  3077. -- elseif b.online_flag == 0 then
  3078. -- return false
  3079. -- else
  3080. -- return a.online_flag > b.online_flag
  3081. -- end
  3082. else
  3083. return a.power > b.power
  3084. end
  3085. end,
  3086. }
  3087. local type_func = sort_func_list[type]
  3088. local sort_func = function ( a, b )
  3089. return type_func(a, b)
  3090. end
  3091. table.sort(mem_list, sort_func)
  3092. return mem_list
  3093. end
  3094. --获得社团支持名字
  3095. function GuildModel:GetSupportTypeName( boss_type )
  3096. if boss_type == Config.ConfigBoss.ModuleId.World then
  3097. return "世界BOSS"
  3098. elseif boss_type == Config.ConfigBoss.ModuleId.Money then
  3099. return "赏金幻魔"
  3100. elseif boss_type == Config.ConfigBoss.ModuleId.Person then
  3101. return "专属幻魔"
  3102. elseif boss_type == Config.ConfigBoss.ModuleId.Collect then
  3103. return "裂隙首领"
  3104. elseif boss_type == Config.ConfigBoss.ModuleId.Deserted then
  3105. return "星域幻魔"
  3106. end
  3107. end
  3108. function GuildModel:CancelCollectSupport()--取消采集协助
  3109. local support_status = self:GetGuildSupportStatus( )--离开社团驻地时且是协助他人 取消协助
  3110. if support_status == 1 or support_status == 2 then
  3111. self:Fire(GuildModel.REQUEST_CCMD_EVENT, 40053)
  3112. end
  3113. end
  3114. -- 发布社团招募
  3115. function GuildModel:SendRecruitMsg( )
  3116. local vo = self:GetGuildBaseInfo()
  3117. if not vo then
  3118. return
  3119. end
  3120. local guild_lv_cfg = Config.Guildlv[vo.guild_lv]
  3121. if vo.member_num >= (guild_lv_cfg.member_capacity + GuildModel:getInstance():GetAddMemNum()) then
  3122. Message.show("社团成员已满,无需招募")
  3123. else
  3124. if Status.NowTime - self.last_recruit_time > 30 then
  3125. local content = string.format("<color=#d322ff>【%s】</color>社团招贤纳士,欢迎各界人士加入!<color=#2cf89a><a@guild_rec@%s>[我要申请]</color></a>"
  3126. ,vo.guild_name,vo.guild_id)
  3127. ChatModel:getInstance():Fire(ChatModel.SEND_MSG, ChatModel.CHANNEL_WORLD, content, 0, nil, ChatModel.CHAT_COMMON_TYPE.SYSTEM)
  3128. self.last_recruit_time = Status.NowTime
  3129. Message.show("发布招募信息成功", "success")
  3130. else
  3131. Message.show("嗓子喊累了,休息下吧~", "fault")
  3132. end
  3133. end
  3134. end
  3135. -- 发布社团频道传闻信息 msg:信息内容 cd:信息的冷却时间(默认10秒) tips:发送成功后飘字
  3136. function GuildModel:SendGuildChuanwenMsg(msg, tips, cd)
  3137. if not msg or msg == "" then return end
  3138. local vo = self:GetGuildBaseInfo()
  3139. if not vo then
  3140. return
  3141. end
  3142. cd = cd or 10
  3143. if Status.NowTime - self.last_send_chuanwen_time > cd then -- 处于冷却时间内才可以发
  3144. ChatModel:getInstance():Fire(ChatModel.SEND_MSG, ChatModel.CHANNEL_GUILD, msg, 0, nil, ChatModel.CHAT_COMMON_TYPE.SYSTEM)
  3145. self.last_send_chuanwen_time = Status.NowTime
  3146. Message.show(tips or "发布信息成功", "succeed")
  3147. else
  3148. Message.show("嗓子喊累了,休息下吧~", "fault")
  3149. end
  3150. end
  3151. --社团boss击杀后300的秒内执行特殊拾取逻辑
  3152. function GuildModel:GetSepcialPickLogicOfGBoss()
  3153. if not SceneManager:getInstance():IsGuildScene() then return false end
  3154. local noon_boss_data = self:GetGuildEventByType(GuildEventType.GuildBossNoon)
  3155. if noon_boss_data and noon_boss_data.state == 1 then
  3156. return true
  3157. end
  3158. local night_boss_data = self:GetGuildEventByType(GuildEventType.GuildBossNight)
  3159. if night_boss_data and night_boss_data.state == 1 then
  3160. return true
  3161. end
  3162. return false
  3163. end
  3164. --------------------------本服团战相关 开始--------------------------
  3165. --上期明星团长
  3166. function GuildModel:GuildWarSetLastMvp(mvp)
  3167. self.guild_war_info.last_mvp = mvp
  3168. self:Fire(GuildModel.GUILD_WAR_LAST_MVP)
  3169. end
  3170. --排行数据
  3171. function GuildModel:GuildWarSetRankList(list, i_type)
  3172. --清空数据
  3173. if not list then
  3174. self.guild_war_info = self.guild_war_info or {}
  3175. self.guild_war_info.rank_list = {}
  3176. self.guild_war_info.my_rank_info = {}
  3177. return
  3178. end
  3179. self.guild_war_info.rank_list = self.guild_war_info.rank_list or {}
  3180. self.guild_war_info.my_rank_info = self.guild_war_info.my_rank_info or {}
  3181. list = list or {}
  3182. if #list >= 2 then
  3183. table.sort(list, function (a, b)
  3184. if a.score ~= b.score then
  3185. return a.score > b.score
  3186. else
  3187. return a.time < b.time
  3188. end
  3189. end)
  3190. end
  3191. local my_info = {}
  3192. if i_type == GuildWarRankView.TAB_ID.PERSON then
  3193. local my_kill_info = {}
  3194. local kill_list_temp = DeepCopy(list)
  3195. local role_name = RoleManager.Instance:GetMainRoleName()
  3196. for i,v in ipairs(list) do
  3197. if v.name == role_name then
  3198. my_info = v
  3199. my_info.my_rank = i
  3200. my_info.score = v.score
  3201. my_info.name = v.name
  3202. my_kill_info = DeepCopy(v)
  3203. end
  3204. v.value_1 = ""
  3205. v.value_2 = v.score
  3206. end
  3207. local kill_list = {}
  3208. for i,v in ipairs(kill_list_temp) do
  3209. if v.max_kill > 0 then
  3210. table.insert(kill_list, v)
  3211. end
  3212. end
  3213. if #kill_list >= 2 then
  3214. table.sort(kill_list, function (a, b)
  3215. if a.max_kill ~= b.max_kill then
  3216. return a.max_kill > b.max_kill
  3217. else
  3218. return a.continue_kill > b.continue_kill
  3219. end
  3220. end)
  3221. end
  3222. my_kill_info.my_rank = 0
  3223. my_kill_info.max_kill = 0
  3224. my_kill_info.continue_kill = 0
  3225. my_kill_info.value_1 = ""
  3226. my_kill_info.value_2 = string.format("%d击杀%d连斩", 0, 0)
  3227. for i,v in ipairs(kill_list) do
  3228. if v.name == role_name then
  3229. my_kill_info = v
  3230. my_kill_info.my_rank = i
  3231. my_kill_info.max_kill = v.max_kill
  3232. my_kill_info.continue_kill = v.continue_kill
  3233. end
  3234. v.value_1 = ""
  3235. v.value_2 = string.format("%d击杀%d连斩", v.max_kill, v.continue_kill)
  3236. end
  3237. --击杀榜
  3238. self.guild_war_info.rank_list[3] = kill_list
  3239. self.guild_war_info.my_rank_info[3] = my_kill_info
  3240. else
  3241. local guild_id = self.base_info.guild_id
  3242. for i,v in ipairs(list) do
  3243. if v.guild_id == guild_id then
  3244. my_info.my_rank = i
  3245. my_info.score = v.score
  3246. my_info.name = v.name
  3247. my_info.value_1 = v.guild_name
  3248. my_info.value_2 = v.score
  3249. end
  3250. v.value_1 = v.guild_name
  3251. v.value_2 = v.score
  3252. end
  3253. end
  3254. self.guild_war_info.rank_list[i_type] = list
  3255. self.guild_war_info.my_rank_info[i_type] = my_info
  3256. self:Fire(GuildModel.GUILD_WAR_RANK_LIST, i_type)
  3257. end
  3258. function GuildModel:GuideWarSetPickState(pick_id)
  3259. self.guild_war_info.pick_id = pick_id
  3260. if pick_id ~= 0 then
  3261. self:FindGuideWarTarget(GuildModel.GuildWarTarget.Npc)
  3262. self.guild_war_info.last_pick_id = nil
  3263. end
  3264. self:Fire(GuildModel.GUILD_WAR_PICK_STATE, pick_id)
  3265. end
  3266. function GuildModel:GuideWarGiveInPick(npc_id)
  3267. if SceneManager:getInstance():IsGuildWarScene() and self:IsGuildWarNpcId(npc_id) then
  3268. --对话确认后,如果有粮食,就去交粮食,没有粮食去找粗粮,
  3269. if self.guild_war_info.pick_id and self.guild_war_info.pick_id ~= 0 then
  3270. self:Fire(GuildModel.REQUEST_CCMD_EVENT,40507, npc_id)
  3271. self.guild_war_info.last_pick_id = self.guild_war_info.pick_id
  3272. else
  3273. self:FindGuideWarTarget(GuildModel.GuildWarTarget.SmallRice)
  3274. end
  3275. end
  3276. end
  3277. function GuildModel:IsGuideWarPickTypeId(type_id)
  3278. return type_id == GuildModel.GuildWarTarget.SmallRice or type_id == GuildModel.GuildWarTarget.MiddleRice or type_id == GuildModel.GuildWarTarget.BigRice
  3279. end
  3280. function GuildModel:GuideWarGiveInPickResult()
  3281. --提交之后,自动找粗粮
  3282. self.guild_war_info.last_pick_id = nil
  3283. self:FindGuideWarTarget(GuildModel.GuildWarTarget.SmallRice)
  3284. end
  3285. function GuildModel:GetRankData(i_type)
  3286. local t1 = self.guild_war_info.rank_list
  3287. local t2 = self.guild_war_info.my_rank_info
  3288. return t1 and t1[i_type] or {}, t2 and t2[i_type] or {}
  3289. end
  3290. --大战状态信息
  3291. function GuildModel:GuildWarSetInfo(begin_time, end_time, score, max_pool)
  3292. self.guild_war_info.begin_time = begin_time
  3293. self.guild_war_info.end_time = end_time
  3294. self.guild_war_info.score = score
  3295. self.guild_war_info.max_pool = max_pool
  3296. self:Fire(GuildModel.GUILD_WAR_BASE_INFO)
  3297. end
  3298. --大战状态信息
  3299. function GuildModel:GuildWarProject(cd_time)
  3300. self.guild_war_info = self.guild_war_info or {}
  3301. self.guild_war_info.cd_time = cd_time
  3302. self:Fire(GuildModel.GUILD_WAR_PROJECT)
  3303. end
  3304. --大战 积分更新
  3305. function GuildModel:GuildWarSetScore(score)
  3306. self.guild_war_info.score = score
  3307. self:Fire(GuildModel.GUILD_WAR_UPDATE_SCROE, score)
  3308. end
  3309. --大战 积分更新
  3310. function GuildModel:GuildWarSetResult(top_guild, top_guild_chief, my_guild_rank, my_personal_rank, score, kill_rank)
  3311. self.guild_war_info.result = {}
  3312. self.guild_war_info.result.mvp_guild = top_guild
  3313. self.guild_war_info.result.mvp_leader = top_guild_chief
  3314. self.guild_war_info.result.my_guild_rank = my_guild_rank
  3315. self.guild_war_info.result.my_rank = my_personal_rank
  3316. self.guild_war_info.result.my_score = score
  3317. self.guild_war_info.result.kill_rank = kill_rank
  3318. if SceneManager:getInstance():IsGuildWarScene() then
  3319. GlobalEventSystem:Fire(EventName.STOPAUTOFIGHT, false, true)
  3320. else
  3321. self:Fire(GuildModel.GUILD_WAR_RESULT)
  3322. end
  3323. end
  3324. --大战寻找目标
  3325. function GuildModel:FindGuideWarTarget(i_type)
  3326. if not SceneManager:getInstance():IsGuildWarScene() then
  3327. Message.show("当前不在活动场景中")
  3328. end
  3329. --如果当前有采集物,继续点采集,则直接去交任务
  3330. if self.guild_war_info.pick_id and self.guild_war_info.pick_id ~= 0 and (i_type == GuildModel.GuildWarTarget.SmallRice or i_type == GuildModel.GuildWarTarget.MiddleRice or i_type == GuildModel.GuildWarTarget.BigRice) then
  3331. i_type = GuildModel.GuildWarTarget.Npc
  3332. end
  3333. local target_id = false
  3334. local scene_id = 4100
  3335. local list = SceneManager.Instance.monster_vo_list
  3336. if i_type == GuildModel.GuildWarTarget.Boss then
  3337. target_id = GuildModel.GuildWarTarget.Boss
  3338. elseif i_type == GuildModel.GuildWarTarget.SmallRice then
  3339. target_id = GuildModel.GuildWarTarget.SmallRice
  3340. elseif i_type == GuildModel.GuildWarTarget.MiddleRice then
  3341. target_id = GuildModel.GuildWarTarget.MiddleRice
  3342. elseif i_type == GuildModel.GuildWarTarget.BigRice then
  3343. target_id = GuildModel.GuildWarTarget.BigRice
  3344. elseif i_type == GuildModel.GuildWarTarget.Npc then
  3345. list = SceneManager.Instance.npc_vo_list
  3346. target_id = GuildModel.GuildWarTarget.Npc
  3347. end
  3348. local vo = false
  3349. local vo_list = {}
  3350. local is_npc = target_id == GuildModel.GuildWarTarget.Npc
  3351. for k,v in pairs(list) do
  3352. if (v.type_id == target_id) or (is_npc and ( v.type_id == GuildModel.GuildWarTarget.Npc_1 or v.type_id == GuildModel.GuildWarTarget.Npc_2 or v.type_id == GuildModel.GuildWarTarget.Npc_3 )) then
  3353. table.insert(vo_list, v)
  3354. end
  3355. end
  3356. if #vo_list > 0 then
  3357. --npc 取最近的一个,粮食随机.bpss,就只有一个
  3358. if is_npc then
  3359. vo = vo_list[1]
  3360. local GameMath_GetDistance = GameMath.GetDistance
  3361. local lx, ly = Scene.Instance.main_role:GetLogicPos()
  3362. local dis = GameMath_GetDistance(lx, ly, vo.pos_x / SceneObj.LogicRealRatio.x, vo.pos_y / SceneObj.LogicRealRatio.y)
  3363. for i,v in ipairs(vo_list) do
  3364. if vo.type_id ~= v.type_id then
  3365. local temp_dis = GameMath_GetDistance(lx, ly, v.pos_x / SceneObj.LogicRealRatio.x, v.pos_y / SceneObj.LogicRealRatio.y)
  3366. if temp_dis < dis then
  3367. vo = v
  3368. dis = temp_dis
  3369. end
  3370. end
  3371. end
  3372. else
  3373. if #vo_list == 1 then
  3374. vo = vo_list[1]
  3375. else
  3376. local idx = math.random(1,#vo_list)
  3377. vo = vo_list[idx]
  3378. end
  3379. end
  3380. end
  3381. if target_id and vo then
  3382. local findVo = FindVo.New()
  3383. findVo.type = is_npc and FindVo.NPC or FindVo.MONSTER
  3384. findVo.id = vo.type_id
  3385. findVo.x = vo.pos_x / SceneObj.LogicRealRatio.x
  3386. findVo.y = vo.pos_y / SceneObj.LogicRealRatio.y
  3387. findVo.sceneId = scene_id
  3388. GlobalEventSystem:Fire(EventName.FIND,findVo)
  3389. if i_type == GuildModel.GuildWarTarget.Boss then
  3390. GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT)
  3391. else
  3392. self:Fire(GuildModel.GUILD_WAR_START_COLLECT)
  3393. end
  3394. else
  3395. if i_type == GuildModel.GuildWarTarget.Boss then
  3396. --不做处理
  3397. Message.show("结晶守卫还未刷新,请稍后再试")
  3398. elseif i_type == GuildModel.GuildWarTarget.SmallRice then
  3399. Message.show("还未刷新,请稍后再试")
  3400. elseif i_type == GuildModel.GuildWarTarget.MiddleRice then
  3401. return false
  3402. elseif i_type == GuildModel.GuildWarTarget.BigRice then
  3403. return false
  3404. else
  3405. Message.show("还未刷新,请稍后再试")
  3406. end
  3407. end
  3408. return true
  3409. end
  3410. --获取boss的数据
  3411. function GuildModel:GuideWarGetBossVo()
  3412. local list = SceneManager.Instance.monster_vo_list
  3413. local vo = false
  3414. for k,v in pairs(list) do
  3415. if v.type_id == GuildModel.GuildWarTarget.Boss then
  3416. vo = v
  3417. break
  3418. end
  3419. end
  3420. return vo
  3421. end
  3422. --获取boss的数据
  3423. function GuildModel:GuideWarGetTargetNum(i_type)
  3424. local list = SceneManager.Instance.monster_vo_list
  3425. local num = 0
  3426. local target_id
  3427. if i_type == GuildModel.GuildWarTarget.BigRice then
  3428. target_id = GuildModel.GuildWarTarget.BigRice
  3429. elseif i_type == GuildModel.GuildWarTarget.SmallRice then
  3430. target_id = GuildModel.GuildWarTarget.SmallRice
  3431. elseif i_type == GuildModel.GuildWarTarget.MiddleRice then
  3432. target_id = GuildModel.GuildWarTarget.MiddleRice
  3433. elseif i_type == GuildModel.GuildWarTarget.Boss then
  3434. target_id = GuildModel.GuildWarTarget.Boss
  3435. end
  3436. for k,v in pairs(list) do
  3437. if v.type_id == target_id then
  3438. num = num + 1
  3439. end
  3440. end
  3441. return num
  3442. end
  3443. --获取当前的积分奖励 返回奖励列表
  3444. function GuildModel:GuildWarGetRewardByScroe(score, show_next)
  3445. local reward_list = self.guild_war_info.reward_list
  3446. score = score or 0
  3447. if not reward_list then
  3448. reward_list = {}
  3449. local config = Config.Guildwarscorereward
  3450. for k,v in pairs(config) do
  3451. table.insert(reward_list, v)
  3452. end
  3453. table.sort(reward_list, function (a, b)
  3454. return a.score < b.score
  3455. end)
  3456. self.guild_war_info.reward_list = reward_list
  3457. end
  3458. if score < reward_list[1].score then
  3459. return show_next and stringtotable(reward_list[1].reward) or {} , false, reward_list[1].score
  3460. elseif score >= reward_list[#reward_list].score then
  3461. return stringtotable(reward_list[#reward_list].reward), true, reward_list[#reward_list].score
  3462. end
  3463. local t = {}
  3464. local cur_step_score = 0
  3465. for i,v in ipairs(reward_list) do
  3466. if reward_list[i] and reward_list[i + 1] and score >= reward_list[i].score and score < reward_list[i + 1].score then
  3467. if show_next then
  3468. t = stringtotable(reward_list[i + 1].reward)
  3469. cur_step_score = reward_list[i + 1].score
  3470. else
  3471. t = stringtotable(reward_list[i].reward)
  3472. cur_step_score = reward_list[i].score
  3473. end
  3474. break
  3475. end
  3476. end
  3477. return t, false, cur_step_score
  3478. end
  3479. --根据当前社团排名获取社团排名奖励
  3480. function GuildModel:GuildWarGetGuildRewardByRank(rank)
  3481. local config = Config.Guildwarguildreward
  3482. local reward_list = {}
  3483. for k,v in pairs(config) do
  3484. if rank >= v.rank_high and rank <= v.rank_low then
  3485. reward_list = stringtotable(v.reward)
  3486. break
  3487. end
  3488. end
  3489. return reward_list
  3490. end
  3491. --根据当前积分排名获取积分排名奖励
  3492. function GuildModel:GuildWarGetScoreRewardByRank(rank)
  3493. local config = Config.Guildwarrolereward
  3494. local reward_list = {}
  3495. for k,v in pairs(config) do
  3496. if rank >= v.rank_high and rank <= v.rank_low then
  3497. reward_list = stringtotable(v.reward)
  3498. break
  3499. end
  3500. end
  3501. return reward_list
  3502. end
  3503. --根据当前击杀排名获取击杀奖励
  3504. function GuildModel:GuildWarGetKillRewardByRank(rank)
  3505. local config = Config.Guildwarkillrank
  3506. local reward_list = {}
  3507. for k,v in pairs(config) do
  3508. if rank == v.rank then
  3509. reward_list = stringtotable(v.reward)
  3510. break
  3511. end
  3512. end
  3513. return reward_list
  3514. end
  3515. --获取当前排名的奖励列表
  3516. function GuildModel:GuildWarGetRankViewRewardByRankAndType(rank, i_type)
  3517. local reward_list = {}
  3518. if i_type == GuildWarRankView.TAB_ID.PERSON then
  3519. local config = Config.Guildwarrolereward
  3520. for k,v in pairs(config) do
  3521. if rank >= v.rank_high and rank <= v.rank_low then
  3522. reward_list = stringtotable(v.reward)
  3523. break
  3524. end
  3525. end
  3526. elseif i_type == GuildWarRankView.TAB_ID.GUILD then
  3527. local config = Config.Guildwarguildreward
  3528. for k,v in pairs(config) do
  3529. if rank >= v.rank_high and rank <= v.rank_low then
  3530. reward_list = stringtotable(v.reward)
  3531. break
  3532. end
  3533. end
  3534. --mvp社团才有mvp社团奖励
  3535. if rank == 1 then
  3536. local mvp_reward_list = stringtotable(Config.Guildwarkv["star_org_award"]["value_content"])
  3537. local not_exit_list = {}
  3538. for i,v in ipairs(mvp_reward_list) do
  3539. local is_exit = false
  3540. for ii,vv in ipairs(reward_list) do
  3541. if v[1] == vv[11] and v[2] == vv[2] then
  3542. vv[3] = vv[3] + v[3]
  3543. is_exit = true
  3544. break
  3545. end
  3546. end
  3547. if not is_exit then
  3548. table.insert(not_exit_list, v)
  3549. end
  3550. end
  3551. if #not_exit_list > 0 then
  3552. for i,v in ipairs(not_exit_list) do
  3553. table.insert(reward_list, v)
  3554. end
  3555. end
  3556. end
  3557. elseif i_type == GuildWarRankView.TAB_ID.KILL then
  3558. local config = Config.Guildwarkillrank
  3559. for k,v in pairs(config) do
  3560. if v.rank == rank then
  3561. reward_list = stringtotable(v.reward)
  3562. break
  3563. end
  3564. end
  3565. end
  3566. return reward_list
  3567. end
  3568. --获取当前排名的奖励列表
  3569. function GuildModel:GuildWarGetRankNumByType(i_type)
  3570. self.guild_war_info = self.guild_war_info or {}
  3571. self.guild_war_info.rank_num = self.guild_war_info.rank_num or {}
  3572. if i_type == GuildWarRankView.TAB_ID.PERSON then
  3573. if not self.guild_war_info.rank_num[i_type] then
  3574. self.guild_war_info.rank_num[i_type] = {}
  3575. local config = Config.Guildwarrolereward
  3576. local max_low = 0
  3577. for k,v in pairs(config) do
  3578. if v.rank_low > max_low then
  3579. max_low = v.rank_low
  3580. end
  3581. end
  3582. for i=1,max_low do
  3583. self.guild_war_info.rank_num[i_type][i] = true
  3584. end
  3585. end
  3586. return self.guild_war_info.rank_num[i_type]
  3587. elseif i_type == GuildWarRankView.TAB_ID.GUILD then
  3588. if not self.guild_war_info.rank_num[i_type] then
  3589. self.guild_war_info.rank_num[i_type] = {}
  3590. local config = Config.Guildwarguildreward
  3591. local max_low = 0
  3592. for k,v in pairs(config) do
  3593. if v.rank_low > max_low then
  3594. max_low = v.rank_low
  3595. end
  3596. end
  3597. for i=1,max_low do
  3598. self.guild_war_info.rank_num[i_type][i] = true
  3599. end
  3600. end
  3601. return self.guild_war_info.rank_num[i_type]
  3602. elseif i_type == GuildWarRankView.TAB_ID.KILL then
  3603. if not self.guild_war_info.rank_num[i_type] then
  3604. local config = Config.Guildwarkillrank
  3605. self.guild_war_info.rank_num[i_type] = config
  3606. end
  3607. return self.guild_war_info.rank_num[i_type]
  3608. end
  3609. return {}
  3610. end
  3611. --是否还在大战中
  3612. function GuildModel:IsInGuildWar()
  3613. local cur_time = TimeUtil:getServerTime()
  3614. local t = self.guild_war_info
  3615. if t and t.end_time and t.begin_time then
  3616. return cur_time > t.begin_time and cur_time < t.end_time
  3617. end
  3618. return false
  3619. end
  3620. --获取boss下次刷新时间
  3621. function GuildModel:GuildWarGetNextBossBornTime()
  3622. if not self:IsInGuildWar() then
  3623. return 0, 0
  3624. end
  3625. local cur_time = TimeUtil:getServerTime()
  3626. local config = Config.Guildwarkv.refresh_boss
  3627. local t = stringtotable(config.value_content)
  3628. local list = {}
  3629. for i,v in ipairs(t) do
  3630. --第几个boss出生的时间,是前面的时间的总和
  3631. local total_time = 0
  3632. for ii=1,i do
  3633. total_time = tonumber(t[ii]) + total_time
  3634. end
  3635. table.insert(list, total_time + self.guild_war_info.begin_time)
  3636. end
  3637. local time = 0 --刷新时间
  3638. local idx = 0 --第几只boss
  3639. for i,v in ipairs(list) do
  3640. if cur_time <= v then
  3641. time = v
  3642. idx = i
  3643. break
  3644. end
  3645. end
  3646. return time, idx
  3647. end
  3648. --检测活动是否开放
  3649. function GuildModel:GuildWarCheckIconBoolOpen(state, end_time)
  3650. local vo =
  3651. {
  3652. state = state,
  3653. etime = end_time,
  3654. }
  3655. self:SetGuildEventByType(GuildEventType.GuildWar, vo)
  3656. end
  3657. --是否是本服团战交粮的npcid
  3658. function GuildModel:IsGuildWarNpcId(type_id)
  3659. return (type_id == GuildModel.GuildWarTarget.Npc_1) or (type_id == GuildModel.GuildWarTarget.Npc_2) or (type_id == GuildModel.GuildWarTarget.Npc_3)
  3660. end
  3661. GuildModel.GUILD_WAR_NPC_TALK_CONTENT =
  3662. {
  3663. [1] = "干得好,这正是我们急需的物资!",
  3664. [2] = "请先去采集物资再来吧!\n<color=#2CF86F>(高级物资需击杀BOSS掉落)</color>",
  3665. }
  3666. --获取Npc对话文本
  3667. function GuildModel:GetGuildWarNpcTalkContent()
  3668. if self:GuildWarIsInPickState() then
  3669. return GuildModel.GUILD_WAR_NPC_TALK_CONTENT[1]
  3670. end
  3671. return GuildModel.GUILD_WAR_NPC_TALK_CONTENT[2]
  3672. end
  3673. --是否在采集状态
  3674. function GuildModel:GuildWarIsInPickState()
  3675. return SceneManager.Instance:IsGuildWarScene() and
  3676. SceneManager:getInstance():IsGuildWarScene() and self.guild_war_info.pick_id and self.guild_war_info.pick_id ~= 0
  3677. end
  3678. --------------------------本服团战相关 结束--------------------------
  3679. --------------------------本国团战相关 start--------------------------
  3680. function GuildModel:CalInCSGRSafePos(pos_x, pos_y)
  3681. -- 如果存在活动且在入场阶段,则需要限制在安全区内
  3682. if self.guild_evt_data[GuildEventType.GuildCSGR] and self.guild_evt_data[GuildEventType.GuildCSGR].status == 1 then
  3683. if SceneManager.Instance:IsSafePos(pos_x, pos_y) then -- 安全区内,自由移动
  3684. -- 缓存当前帧所在的坐标
  3685. self.csgr_scene_last_pos.x = pos_x
  3686. self.csgr_scene_last_pos.y = pos_y
  3687. return pos_x, pos_y
  3688. else
  3689. -- 当前位置会超出安全区,则需要返回上一帧的坐标
  3690. if self.csgr_scene_last_pos.x == 0 or self.csgr_scene_last_pos.y == 0 then
  3691. return pos_x, pos_y
  3692. else
  3693. return self.csgr_scene_last_pos.x, self.csgr_scene_last_pos.y
  3694. end
  3695. end
  3696. else
  3697. return pos_x, pos_y
  3698. end
  3699. end
  3700. -- 根据不同的需求获取本国团战采集怪配置
  3701. function GuildModel:GetCSGRCollectCfg(attr_id)
  3702. self.csgr_collect_cfg_data = self.csgr_collect_cfg_data or stringtotable(Config.Campwarkv["material_attr"].val)
  3703. if not self.csgr_collect_cfg_data2 then
  3704. self.csgr_collect_cfg_data2 = {}
  3705. for k, v in ipairs(self.csgr_collect_cfg_data) do
  3706. self.csgr_collect_cfg_data2[v[1]] = v
  3707. end
  3708. end
  3709. if attr_id then
  3710. return self.csgr_collect_cfg_data2[attr_id]
  3711. else
  3712. return self.csgr_collect_cfg_data
  3713. end
  3714. end
  3715. function GuildModel:GetCSGRCurBossHp( )
  3716. local percentage = 1
  3717. local max_hp = 10000000000000
  3718. local event_data = self:GetGuildEventByType(GuildEventType.GuildCSGR)
  3719. if event_data and event_data.status == 3 then
  3720. local total_time = event_data.end_time - event_data.start_time - 5
  3721. local pass_time = TimeUtil:getServerTime() - event_data.start_time
  3722. percentage = 1 - (pass_time / total_time)
  3723. percentage = percentage <= 0 and 0 or percentage
  3724. else
  3725. percentage = 0
  3726. end
  3727. local monsterHp = max_hp * percentage
  3728. return monsterHp, max_hp, percentage
  3729. end
  3730. -- 血量变化计时器
  3731. function GuildModel:StartCSGRBossHpTimer( )
  3732. self:StopCSGRBossHpTimer()
  3733. local function csgr_boss_hp_func()
  3734. local monsterHp, max_hp, percentage = self:GetCSGRCurBossHp()
  3735. self:Fire(GuildModel.UPDATE_CSGR_BOSS_HP, monsterHp, max_hp, percentage)
  3736. end
  3737. self.guild_csgr_hp_timer = GlobalTimerQuest:AddPeriodQuest(csgr_boss_hp_func, 0.5, -1)
  3738. end
  3739. function GuildModel:StopCSGRBossHpTimer( )
  3740. if self.guild_csgr_hp_timer then
  3741. GlobalTimerQuest:CancelQuest(self.guild_csgr_hp_timer)
  3742. self.guild_csgr_hp_timer = nil
  3743. end
  3744. end
  3745. -- 判断当前本国团战是否在采集阶段
  3746. function GuildModel:IsCSGRInCollectRound( )
  3747. local b = false
  3748. local event_data = self:GetGuildEventByType(GuildEventType.GuildCSGR)
  3749. if event_data then
  3750. b = event_data.status == 2 -- 2为采集阶段
  3751. end
  3752. return b
  3753. end
  3754. -- 更新本国团战自动采集状态
  3755. function GuildModel:UpdateCSGRAutoCollectFlag(flag)
  3756. self.csgr_auto_collect = false
  3757. -- 场景内切换自动采集,中断当前的采集状态
  3758. if SceneManager:getInstance():IsGuildCSGRScene() and self:IsCSGRInCollectRound() then
  3759. GlobalEventSystem:Fire(EventName.CANCEL_TO_COLLECT)
  3760. Scene.Instance:CancelClickTarget(nil,true) --把目标清掉
  3761. self.csgr_auto_collect = flag
  3762. end
  3763. end
  3764. function GuildModel:GetCSGRAUtoCollectStatus( )
  3765. return self.csgr_auto_collect
  3766. end
  3767. function GuildModel:CSGRAutoCollect()
  3768. if self.csgr_auto_collect then
  3769. local nearest_mon = Scene:getInstance():GetNearestGuildCollectMonsterByTypeId()
  3770. if nearest_mon then
  3771. local function call_back()
  3772. Scene.Instance:SetClickTarget(nearest_mon, true)
  3773. end
  3774. local findVo = FindVo.New()
  3775. findVo.type = FindVo.MONSTER
  3776. findVo.x = nearest_mon.vo.pos_x / SceneObj.LogicRealRatio.x
  3777. findVo.y = nearest_mon.vo.pos_y / SceneObj.LogicRealRatio.y
  3778. findVo.sceneId = SceneManager:getInstance():GetSceneId()
  3779. findVo.id = nearest_mon.vo.type_id
  3780. findVo.call_back = call_back
  3781. GlobalEventSystem:Fire(EventName.FIND, findVo)
  3782. else -- 没有采集物,或者在九宫格以外,需要前端查找可以采集的对象发送协议自动移动到目的地
  3783. local temp_buff_list = {} -- 临时表,用来存储有剩余的采集buff信息
  3784. local collect_cfg_data = self:GetCSGRCollectCfg()
  3785. -- 筛选出当前还有剩余的采集物
  3786. for k, v in ipairs(collect_cfg_data) do
  3787. local buff_data = self:GetCSGRBattlefieldRes(v[1])
  3788. if buff_data and buff_data.num > 0 then
  3789. table.insert(temp_buff_list, v)
  3790. end
  3791. end
  3792. local ramdom_cfg = temp_buff_list[math.random(1, #temp_buff_list)]
  3793. local attr_icon = ramdom_cfg and ramdom_cfg[1]
  3794. if attr_icon then
  3795. self:Fire(GuildModel.REQUEST_CCMD_EVENT, 41008, attr_icon)
  3796. end
  3797. end
  3798. end
  3799. end
  3800. --------------------------本国团战相关 end--------------------------
  3801. --------- 社团数据获取相关代码 end ---------
  3802. --获取社团竞榜增加人数
  3803. function GuildModel:GetAddMemNum( )
  3804. if GuildModel:getInstance().base_info and GuildModel:getInstance().base_info.add_mem_num then
  3805. return GuildModel:getInstance().base_info.add_mem_num
  3806. end
  3807. return 0
  3808. end
  3809. --判断是否是社团类功能id
  3810. function GuildModel:GetIsGuildModel( model_id )
  3811. model_id = model_id or 0
  3812. self.guild_model_id_list = self.guild_model_id_list or {[142] = true,[400] = true,[405] = true,[406] = true,[408] = true}
  3813. return self.guild_model_id_list[model_id] and true or false
  3814. end
  3815. ----------社团跑环答题-start---------
  3816. -- 获取最大答题数 需要答对数
  3817. function GuildModel:GetQuizTimesKv( )
  3818. local cfg = stringtotable(Config.Guildrunassistkv["answer_times"].val)
  3819. return cfg[1], cfg[2]
  3820. end
  3821. -- 设置答题数据
  3822. function GuildModel:SetGuildQuizID( vo )
  3823. self.cur_guild_quiz_id = vo.quiz_id
  3824. self.guild_quiz_seq = vo.index
  3825. end
  3826. -- 获取当前题目id 和 题目索引
  3827. function GuildModel:GetGuildQuizID( )
  3828. return self.cur_guild_quiz_id, self.guild_quiz_seq
  3829. end
  3830. -- 初始化答题数据
  3831. function GuildModel:InitGuildQuizData( support_sid )
  3832. -- self.guild_quiz_seq = 1 -- 进度第一题
  3833. self.cur_guild_quiz_id = nil
  3834. self.guild_quiz_seq = 1
  3835. self.guild_quiz_get_times = 0 -- 答对的数目
  3836. self.guild_quiz_support_sid = support_sid or 0 -- 本次答题的协助id
  3837. end
  3838. -- 获取本次答题协助剩余时间
  3839. function GuildModel:GetCurQuizRemainTime( )
  3840. local data = self:GetGuildSupportInfoById( self.guild_quiz_support_sid )
  3841. if not data then return 0 end
  3842. local _, end_time = self:ParseData(data.kv_data)
  3843. local time = end_time - TimeUtil:getServerTime( )
  3844. return time
  3845. end
  3846. -- 答题后的数据更新 41702
  3847. function GuildModel:UpdateGuildQuizData( vo )
  3848. self.guild_quiz_get_times = vo.success_quiz
  3849. end
  3850. -- 获取答对的题目数
  3851. function GuildModel:GetCurCorrectTimes( )
  3852. return self.guild_quiz_get_times or 0
  3853. end
  3854. -- 获取答题协助奖励列表
  3855. function GuildModel:GetGuildQuizAwardList( )
  3856. -- local temp_award_list = DeepCopy(self.guild_support_cfg[5].support_reward)
  3857. local reward_reputation_count = self.guild_support_cfg[5].reward_reputation
  3858. -- table.insert(temp_award_list, {100, 100003, reward_reputation_count} )
  3859. local temp_award_list = {
  3860. {100, 100003, reward_reputation_count},
  3861. }
  3862. return temp_award_list
  3863. end
  3864. -- 设置结算数据 41703
  3865. function GuildModel:SetGuildQuizResultData( vo )
  3866. self.quiz_res = vo.res
  3867. end
  3868. -- 获取答题结果
  3869. function GuildModel:GetGuildQuizResultData( )
  3870. return self.quiz_res
  3871. end
  3872. -- 重连初始化答题数据
  3873. function GuildModel:ReLinkInitGuildQuizData( vo )
  3874. self.guild_quiz_seq = vo.index or 1 -- 进度第几题
  3875. self.guild_quiz_get_times = vo.success_quiz or 0 -- 答对的数目
  3876. self.guild_quiz_support_sid = vo.sid or 0 -- 本次答题的协助id
  3877. self.cur_guild_quiz_id = vo.quiz_id or 0 -- 当前题目
  3878. end
  3879. -- 设置战场活动提示红点
  3880. function GuildModel:SetWarActiveRedDot(module_id, module_sub, state)
  3881. local key = module_id .. "@" .. module_sub
  3882. self.war_active_show_red_dot[key] = state or false
  3883. self:Fire(GuildModel.SHOW_ACTIVE_OPEN_TIPS_RED)
  3884. end
  3885. --获取战场提示红点
  3886. function GuildModel:GetWarActiveRedDot(module_id, module_sub)
  3887. local key = module_id .. "@" .. module_sub
  3888. return self.war_active_show_red_dot[key] or false
  3889. end
  3890. function GuildModel:ParseData(str)
  3891. local bosspower = 0
  3892. local end_time = 0
  3893. local boss_id = 0
  3894. local dun_id = 0
  3895. local status = 0
  3896. if str and str ~= "" then
  3897. local info = stringtotable(str)
  3898. if info and #info > 0 then
  3899. for i,v in ipairs(info) do
  3900. local key = tonumber(v[1])
  3901. if key == 1 then
  3902. bosspower = tonumber(v[2])
  3903. elseif key == 2 then
  3904. end_time = tonumber(v[2])
  3905. elseif key == 3 then
  3906. boss_id = tonumber(v[2])
  3907. elseif key == 4 then
  3908. dun_id = tonumber(v[2])
  3909. elseif key == 5 then
  3910. status = tonumber(v[2])
  3911. end
  3912. end
  3913. end
  3914. end
  3915. return bosspower, end_time, boss_id, dun_id, status
  3916. end
  3917. ----------社团跑环答题-end-----------