源战役客户端
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

988 satır
30 KiB

  1. SocialityModel = SocialityModel or BaseClass(BaseModel)
  2. SocialityModel.REFRESH_RED_POINT = "REFRESH_RED_POINT"
  3. SocialityModel.REQUEST_CCMD_EVENT = "SocialityModel.REQUEST_CCMD_EVENT" --请求协议
  4. SocialityModel.UPDATE_ADD_FRIEND_VIEW = "SocialityModel.UPDATE_ADD_FRIEND_VIEW" --更新推荐好友或搜索好友
  5. SocialityModel.UPDATE_APPLY_FRIEND_VIEW = "SocialityModel.UPDATE_APPLY_FRIEND_VIEW" --更新好友申请列表
  6. SocialityModel.REQUEST_SOCIAL_LIST = "SocialityModel.REQUEST_SOCIAL_LIST" --请求社交关系列表
  7. SocialityModel.UPDATE_SOCIALITY_VIEW = "SocialityModel.UPDATE_SOCIALITY_VIEW" --更新社交列表
  8. SocialityModel.SELECT_FIREND = "SocialityModel.SELECT_FIREND" --选中好友
  9. SocialityModel.UPDATE_RECEIVE_VIEW = "SocialityModel.UPDATE_RECEIVE_VIEW" --更新收到鲜花界面
  10. SocialityModel.SHOW_FLOWER_EFFECT = "SocialityModel.SHOW_FLOWER_EFFECT" --播放特效
  11. SocialityModel.STOP_FLOWER_EFFECT = "SocialityModel.STOP_FLOWER_EFFECT" --停止播放特效
  12. SocialityModel.UPDATE_CHARM_VIEW = "SocialityModel.UPDATE_CHARM_VIEW" --更新魅力值
  13. SocialityModel.REQUEST_OTHER_INFO = "SocialityModel.REQUEST_OTHER_INFO" --请求他人信息,弹框
  14. SocialityModel.UPDATE_OTHER_ROLE_RELA = "SocialityModel.UPDATE_OTHER_ROLE_RELA" --更新他人信息
  15. SocialityModel.UPDATE_ALL_ADD_FRIEND_VIEW = "SocialityModel.UPDATE_ALL_ADD_FRIEND_VIEW" --在添加好友界面中点"一键添加好友"后刷新界面
  16. SocialityModel.UPDATE_SMASH_EGG_MAIN_VIEW = "SocialityModel.UPDATE_SMASH_EGG_MAIN_VIEW" --在砸蛋完之后的更新界面
  17. SocialityModel.UPDATE_EGG_VIEW_CAHRM = "SocialityModel.UPDATE_EGG_VIEW_CAHRM" --更新砸蛋界面中的对方的魅力值
  18. SocialityModel.UPDATE_SMASH_EGG_NUM = "SocialityModel.UPDATE_SMASH_EGG_NUM" --更新砸蛋界面中的砸蛋次数
  19. SocialityModel.OPEN_FRIEND_MSG_VIEW = "SocialityModel.OPEN_FRIEND_MSG_VIEW" --打开聊天界面上方的好友信息栏
  20. SocialityModel.REFRESH_SUB_BTN_RED = "SocialityModel.REFRESH_SUB_BTN_RED" --刷新subBtn的红点
  21. SocialityModel.UPDATE_TICKETS_STATE = "SocialityModel.UPDATE_TICKETS_STATE" --刷新票券状态
  22. SocialityModel.UPDATE_FLOWER_NUM = "SocialityModel.UPDATE_FLOWER_NUM" --送礼后刷新送礼界面
  23. SocialityModel.ANS_FRIEND_SHOW_DATA = "SocialityModel.ANS_FRIEND_SHOW_DATA" --查询好友信息返回形象
  24. SocialityModel.UPDATE_ALL_TICKETS_STATE = "SocialityModel.UPDATE_ALL_TICKETS_STATE"
  25. SocialityModel.CLOSE_ASSISTANT_CONTENT_BAR = "SocialityModel.CLOSE_ASSISTANT_BAR" --关闭小助手的上拉栏
  26. SocialityModel.UPDATE_RECOMMEND_TEXT = "SocialityModel.UPDATE_RECOMMEND_TEXT" --刷新推荐好友文本为查找结果
  27. SocialityModel.CHAT_WITH_ROLEID = "SocialityModel.CHAT_WITH_ROLEID"--和指定id的人聊天
  28. SocialityModel.UPDATE_SOCIALITY_RECENT_VIEW = "SocialityModel.UPDATE_SOCIALITY_RECENT_VIEW"--刷新最近联系人界面
  29. SocialityModel.UPDATE_ONE_WAY_SCROLL_VIEW_SIZE = "SocialityModel.UPDATE_ONE_WAY_SCROLL_VIEW_SIZE" -- 刷新聊天框大小
  30. SocialityModel.UPDATE_TAB_SUB_ITEM = "SocialityModel.UPDATE_TAB_SUB_ITEM"
  31. SocialityModel.BROADCAST_MIDDLE_MESSAGE = "SocialityModel.BROADCAST_MIDDLE_MESSAGE" -- 广播指定系统提示
  32. SocialityModel.UPDATE_ADD_FRIEND_BTN_STATE = "SocialityModel.UPDATE_ADD_FRIEND_BTN_STATE" --添加好友后更新添加按钮的状态
  33. SocialityModel.OPEN_SOCIALITY_INTIMACY_ADDITION_AFTER_FIGURE = "SocialityModel.OPEN_SOCIALITY_INTIMACY_ADDITION_AFTER_FIGURE"
  34. SocialityModel.REFRESH_SOCIALITY_SP_GIFT_LIMIT = "SocialityModel.REFRESH_SOCIALITY_SP_GIFT_LIMIT"
  35. SocialityModel.UPDATE_RECEIVE_RECORD_THANK_STATE = "SocialityModel.UPDATE_RECEIVE_RECORD_THANK_STATE"--刷新收礼记录感谢状态
  36. SocialityModel.Index2Name =
  37. {
  38. [1] = {id = 1, name = "好友",module_id = 140, sub_id = 0},
  39. [2] = {id = 2, name = "添加",module_id = 140, sub_id = 0},
  40. [3] = {id = 3, name = "邮件",module_id = 190, sub_id = 0},
  41. }
  42. SocialityModel.TicketType =
  43. {
  44. Friend = 1,--好友互送名望券
  45. Mate = 2,--羁绊点
  46. }
  47. function SocialityModel:__init()
  48. SocialityModel.Instance = self
  49. self:Reset()
  50. end
  51. function SocialityModel:Reset( )
  52. self.relative_info = {} --关系列表
  53. self.apply_info = {} --好友申请列表
  54. self.receive_info = {} --收到鲜花信息
  55. self.flower_effect_list = {}
  56. self.charm_info = {} --魅力值,名誉,鲜花数信息
  57. self.sociality_is_open = false --社交界面是否打开
  58. self.has_private_chat = false --社交 是否有人私聊
  59. self.last_give_flower_info = nil --上次送礼的一个玩家记录
  60. self.search_info = {} --通过搜索得到的玩家信息
  61. self.is_open_give_view = false --是否打开送花界面
  62. self.has_new_flower_record = false --是否有新的送花记录
  63. self.not_update_recent = false
  64. self.last_inform_id = nil --本次登录中上次举报的人
  65. self.temp_chat_msg_content = nil --私聊好友的临时文本
  66. self.friend_tab_index = 2 --联系人列表的页签 1:最近 2:好友
  67. self.egg_info = nil --砸蛋次数等信息
  68. self.red_dot_list = {}
  69. self.thank_list = {}
  70. self.friend_state_list = {} --存放好友对自己的状态的列表,状态1:自己在对方好友列表中,状态6:自己不在对方好友列表中
  71. self.sp_gift_limit_data = {}
  72. self:ResetTickInfo()
  73. end
  74. --设置存放好友对自己的状态的列表,状态1:自己在对方好友列表中,状态6:自己不在对方好友列表中
  75. function SocialityModel:SetFriendStateList(vo)
  76. for k,v in pairs(vo.opp_rela_list) do
  77. self.friend_state_list[v.role_id] = {}
  78. self.friend_state_list[v.role_id].role_id = v.role_id
  79. self.friend_state_list[v.role_id].opp_rela_type = v.opp_rela_type
  80. self.friend_state_list[v.role_id].ask_response_status = v.ask_response_status
  81. end
  82. end
  83. --判断自己是否是对方的单向好友
  84. function SocialityModel:IsOneWayToFriend(role_id)
  85. if self.friend_state_list[role_id] and self.friend_state_list[role_id].opp_rela_type == 6 then
  86. return true
  87. end
  88. return false
  89. end
  90. --获取好友处理自己好友请求的处理状态 0-未响应 1-已拒绝 (主要用于单向好友的处理)
  91. function SocialityModel:GetAskResponseStatus(role_id)
  92. if self.friend_state_list[role_id] then
  93. return self.friend_state_list[role_id].ask_response_status
  94. end
  95. return 0
  96. end
  97. function SocialityModel:ResetTickInfo( )
  98. self.tickets_send_count = 0 --票券每日赠送次数
  99. self.tickets_gift_count = 0 --票券每日收礼次数
  100. self.send_role_list = {
  101. [SocialityModel.TicketType.Friend] = {},
  102. [SocialityModel.TicketType.Mate] = {}
  103. } --票券已赠玩家列表
  104. self.gift_role_list = {
  105. [SocialityModel.TicketType.Friend] = {},
  106. [SocialityModel.TicketType.Mate] = {}
  107. } --票券收礼玩家列表
  108. end
  109. function SocialityModel:getInstance()
  110. if SocialityModel.Instance == nil then
  111. SocialityModel.New()
  112. end
  113. return SocialityModel.Instance
  114. end
  115. function SocialityModel:GetSocialSubView( index )
  116. local sub_view = nil
  117. if index == 1 then
  118. sub_view = SocialityFriendView
  119. elseif index == 3 then
  120. sub_view = SocialityMailView
  121. elseif index == 2 then
  122. sub_view = SocialityAddFriendView
  123. end
  124. return sub_view
  125. end
  126. function SocialityModel:GetTabData( )
  127. local tab_data = {}
  128. for i,v in ipairs(SocialityModel.Index2Name) do
  129. table.insert(tab_data, SocialityModel.Index2Name[i])
  130. end
  131. -- local tab_data = {"好友","邮件",}
  132. -- if ClientConfig.alpha_mode then --审核状态屏蔽邮件 --暂时不需要屏蔽
  133. -- tab_data = {{name = "好友", light_res = "", dark_res = ""}}
  134. -- end
  135. return tab_data
  136. end
  137. -- 判断是否到达好友数量上限
  138. function SocialityModel:CheckIsFullFriend()
  139. local is_full = false
  140. local cfg = Config.Relaconfig
  141. if cfg and cfg[1] then
  142. local list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.friend)
  143. if list then
  144. is_full = TableSize(list) == cfg[1].value
  145. end
  146. end
  147. return is_full
  148. end
  149. function SocialityModel:GetFriendTabData( )
  150. local tab_data = {
  151. -- [1] = {main_tab = "最近联系", sub_tab = {}, info = {}},
  152. -- [2] = {main_tab = "我的好友", sub_tab = {}, info = {}},
  153. -- [3] = {main_tab = "社团成员", sub_tab = {}, info = {}},
  154. -- [4] = {main_tab = "我的仇人", sub_tab = {}, info = {}},
  155. -- [5] = {main_tab = "黑名单", sub_tab = {}, info = {}},
  156. [1] = {main_tab = "我的好友", sub_tab = {}, info = {}},
  157. [2] = {main_tab = "羁绊", sub_tab = {}, info = {}},
  158. [3] = {main_tab = "黑名单", sub_tab = {}, info = {}},
  159. }
  160. local function setInfo( index, type )
  161. local list = self:GetRelativeInfoByType(type)
  162. tab_data[index].sub_tab = list
  163. local info = tab_data[index].info
  164. info.totalNum = #list
  165. info.onLineNum = self:GetOnLineNumByType(type)
  166. end
  167. -- --最近联系
  168. -- local list, num = self:GetRecentFriendList()
  169. -- tab_data[1].sub_tab = list
  170. -- local info = tab_data[1].info
  171. -- info.totalNum = #list
  172. -- info.onLineNum = num
  173. --好友
  174. setInfo(1, Config.ConfigSocial.RelativeType.friend)
  175. --羁绊
  176. setInfo(2, Config.ConfigSocial.RelativeType.magee)
  177. --黑名单
  178. setInfo(3, Config.ConfigSocial.RelativeType.black)
  179. return tab_data
  180. end
  181. function SocialityModel:GetRecentFriendTabData()
  182. local tab_data = {
  183. [1] = {main_tab = "最近联系", sub_tab = {}, info = {}},
  184. }
  185. --最近联系
  186. local list, num = self:GetRecentFriendList()
  187. tab_data[1].sub_tab = list
  188. local info = tab_data[1].info
  189. info.totalNum = #list
  190. info.onLineNum = num
  191. return tab_data
  192. end
  193. function SocialityModel:GetInfoByIndex( index, sub_index )
  194. local list = {}
  195. --如果传进来的index是1要分两种情况,当前栏是最近联系人和当前栏是联系人
  196. if index == 1 then
  197. if self.friend_tab_index == 1 then
  198. list = self:GetRecentFriendList()
  199. else
  200. list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.friend)
  201. end
  202. elseif index == 2 then
  203. list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.magee)
  204. elseif index == 3 then
  205. list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.black)
  206. -- elseif index == 5 then
  207. -- list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.black)
  208. end
  209. return list[sub_index]
  210. end
  211. --根据私聊id查找索引
  212. function SocialityModel:GetIndexByChatKey( key )
  213. local list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.friend)
  214. for k,v in pairs(list) do
  215. if v.role_id == key then
  216. return 1, k
  217. end
  218. end
  219. list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.magee)
  220. for k,v in pairs(list) do
  221. if v.role_id == key then
  222. return 2, k
  223. end
  224. end
  225. list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.black)
  226. for k,v in pairs(list) do
  227. if v.role_id == key then
  228. return 3, k
  229. end
  230. end
  231. end
  232. function SocialityModel:GetRecentListIndex(key)
  233. local list = self:GetRecentFriendList()
  234. for k,v in pairs(list) do
  235. if v.role_id == key then
  236. return 1, k
  237. end
  238. end
  239. end
  240. function SocialityModel:InitRelaList( )
  241. self.relative_info[1] = {}
  242. self.relative_info[2] = {}
  243. self.relative_info[5] = {}
  244. self.relative_info[6] = {}
  245. end
  246. function SocialityModel:SetRelativeInfo(type,list,do_not_sort)
  247. self.relative_info[type] = {}
  248. --排序 online_flag为2是离线挂机,当成0来排序
  249. for k,v in pairs(list) do
  250. if v.online_flag==2 then
  251. v.isOnline = 0
  252. else
  253. v.isOnline = v.online_flag
  254. end
  255. -- if type == Config.ConfigSocial.RelativeType.black then
  256. -- v.intimacy = 0
  257. -- end
  258. end
  259. if not do_not_sort then
  260. if type == Config.ConfigSocial.RelativeType.friend then
  261. local arg = {"isOnline", "intimacy", "lv", "add_time"}
  262. local condition = {Array.UPPER, Array.UPPER, Array.UPPER, Array.LOWER,}
  263. SortTools.MoreKeysSorter(list, arg, condition)
  264. elseif type == Config.ConfigSocial.RelativeType.magee then
  265. local arg = {"isOnline", "intimacy", "lv", "add_time"}
  266. local condition = {Array.UPPER, Array.UPPER, Array.UPPER, Array.LOWER,}
  267. SortTools.MoreKeysSorter(list, arg, condition)
  268. -- elseif type == Config.ConfigSocial.RelativeType.enemy then
  269. -- local arg = {"isOnline", "add_time"}
  270. -- local condition = {Array.UPPER, Array.LOWER,}
  271. -- SortTools.MoreKeysSorter(list, arg, condition)
  272. -- elseif type == Config.ConfigSocial.RelativeType.black then
  273. -- local arg = {"add_time"}
  274. -- local condition = {Array.LOWER,}
  275. -- SortTools.MoreKeysSorter(list, arg, condition)
  276. end
  277. end
  278. --如果是type=5最近联系人的时候,在GetRecentFriendList中单独进行排序
  279. --如果type=6单向好友时,不做处理,存起来就行,单向好友不做单独列表展示,只用于最近联系人里查询
  280. if type == 1 then
  281. --添加“小助手”联系人
  282. local assistant = {}
  283. assistant.lv = 0
  284. assistant.guild_name = ""
  285. assistant.marriage_type = 0
  286. assistant.last_logout_time = 0
  287. assistant.sup_vip_type = 0
  288. assistant.profile_photo_id = 999999
  289. assistant.add_time = 0
  290. assistant.vip_flag = 0
  291. assistant.isOnline = 1
  292. assistant.sex = 2
  293. assistant.role_id = 1
  294. assistant.role_name = "AI管家"
  295. assistant.career = 0
  296. assistant.intimacy = 0
  297. assistant.online_flag = 1
  298. assistant.turn = 0
  299. assistant.last_chat_time = 0
  300. local is_have = false
  301. for k,v in pairs(list) do
  302. if v.role_id == 1 then
  303. is_have = true
  304. end
  305. end
  306. if not is_have then
  307. table.insert(list,1,assistant)
  308. end
  309. end
  310. self.relative_info[type] = list
  311. end
  312. function SocialityModel:GetRelativeInfoByType( type )
  313. return self.relative_info[type] or {}
  314. end
  315. function SocialityModel:UpdateShieldList( action_type,data)
  316. -- local list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.black)
  317. self.relative_info[Config.ConfigSocial.RelativeType.black] = self.relative_info[Config.ConfigSocial.RelativeType.black] or {}
  318. if not data then return end
  319. data.isOnline = 0
  320. -- data.intimacy = 0
  321. if action_type == 1 then
  322. --先对figuredata进行一次参数的转化,使其和好友的info信息匹配
  323. local new_data = self:TranslateFigureData(data)
  324. table.insert(self.relative_info[Config.ConfigSocial.RelativeType.black],new_data)
  325. else
  326. for k,v in pairs(self.relative_info[Config.ConfigSocial.RelativeType.black]) do
  327. if v.role_id == data.role_id then
  328. -- self.relative_info[Config.ConfigSocial.RelativeType.black][k] = nil
  329. table.remove(self.relative_info[Config.ConfigSocial.RelativeType.black],k)
  330. break
  331. end
  332. end
  333. end
  334. end
  335. --收到私聊消息后更新和该好友的最后私聊时间
  336. function SocialityModel:UpdateLastChatTime(role_id, last_chat_time)
  337. if self.relative_info and self.relative_info[Config.ConfigSocial.RelativeType.friend] then
  338. for k,v in pairs(self.relative_info[Config.ConfigSocial.RelativeType.friend]) do
  339. if v.role_id == role_id then
  340. v.last_chat_time = last_chat_time
  341. break
  342. end
  343. end
  344. end
  345. end
  346. --获取好友的信息
  347. function SocialityModel:GetFriendData(role_id)
  348. if self.relative_info then
  349. for k,v in pairs(self.relative_info) do
  350. for kk,vv in pairs(v) do
  351. if vv.role_id == role_id then
  352. return vv
  353. end
  354. end
  355. end
  356. end
  357. return nil
  358. end
  359. --有可能会遗漏,屏蔽名单数据再出现问题的话来这里和figureProtocol对照一下
  360. function SocialityModel:TranslateFigureData( data )
  361. local new_data = {}
  362. new_data.role_id = data.role_id
  363. new_data.role_name = data.name
  364. new_data.career = data.career
  365. new_data.sex = data.sex
  366. new_data.turn = data.turn
  367. new_data.lv = data.level
  368. new_data.sup_vip_type = data.sup_vip_type
  369. new_data.vip = data.vip_flag
  370. new_data.picture = data.picture
  371. new_data.picture_ver = data.picture_ver
  372. new_data.online_flag = 0
  373. new_data.intimacy = 0
  374. new_data.marriage_type = data.is_marriage
  375. new_data.last_chat_time = 0
  376. new_data.add_time = 0
  377. new_data.guild_name = data.guild_name
  378. new_data.last_logout_time = 0
  379. new_data.profile_photo_id = data.profile_photo_id
  380. return new_data
  381. end
  382. function SocialityModel:SetApplyInfo( info )
  383. self.apply_info = info
  384. end
  385. function SocialityModel:GetApplyInfo( )
  386. return self.apply_info
  387. end
  388. --获取请求好友的红点数量
  389. function SocialityModel:GetApplyInfoRedNum( )
  390. if self.apply_info and self.apply_info.ask_list then
  391. return #self.apply_info.ask_list
  392. else
  393. return 0
  394. end
  395. end
  396. function SocialityModel:SetReceiveInfo( info )
  397. self.receive_info = info
  398. self:GetRecentGiveFlowerInfo() --筛选出最近送花的一个
  399. end
  400. function SocialityModel:GetReceiveInfo(type)
  401. local data = {}
  402. if type == 1 or type == 2 then
  403. for i,v in ipairs(self.receive_info.record_list) do
  404. if v.code == type then
  405. table.insert(data,v)
  406. end
  407. end
  408. end
  409. return #data ~= 0 and data or nil
  410. end
  411. --22309
  412. function SocialityModel:UpdateGiftReciveThankState(vo)
  413. for i,v in ipairs(self.receive_info.record_list) do
  414. if v.code == 2 and v.id == vo.id then
  415. v.thank = 1
  416. end
  417. end
  418. end
  419. function SocialityModel:SetCharmInfo( info )
  420. self.charm_info = info
  421. end
  422. function SocialityModel:GetCharmInfo( )
  423. return self.charm_info
  424. end
  425. function SocialityModel:SetSearchInfo( vo )
  426. self.search_info =
  427. {role_id = vo.role_id, role_name = vo.role_name, career = vo.career, sex = vo.sex,
  428. turn = vo.turn, lv = vo.lv, vip = vo.vip,picture = vo.picture,
  429. picture_ver = vo.picture_ver, online_flag = vo.online_flag,sup_vip_type = vo.sup_vip_type}
  430. end
  431. --获取某类型好友的在线人数
  432. function SocialityModel:GetOnLineNumByType( type )
  433. local count = 0
  434. local list = self:GetRelativeInfoByType(type)
  435. for k,v in pairs(list) do
  436. if v.online_flag == 1 then
  437. count = count + 1
  438. end
  439. end
  440. return count
  441. end
  442. --获取最近联系的10个好友 与在线人数
  443. function SocialityModel:GetRecentFriendList( )
  444. local tb = {}
  445. local count = 0
  446. -- local list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.friend)
  447. local tb = DeepCopy(self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.recent))
  448. -- for k,v in pairs(list) do
  449. -- -- if v.last_chat_time~=0 then
  450. -- table.insert(tb, v)
  451. -- -- end
  452. -- end
  453. local arg = {"last_chat_time","last_logout_time"}
  454. local condition = {Array.UPPER,Array.UPPER}
  455. SortTools.MoreKeysSorter(tb, arg, condition)
  456. local result = {}
  457. local len = #tb>10 and 10 or #tb
  458. for i=1, len do
  459. if tb[i].online_flag==1 then
  460. count = count + 1
  461. end
  462. table.insert(result, tb[i])
  463. end
  464. --在最近联系人一栏中添加“小助手”联系人
  465. local assistant = {}
  466. assistant.lv = 0
  467. assistant.guild_name = ""
  468. assistant.marriage_type = 0
  469. assistant.last_logout_time = 0
  470. assistant.sup_vip_type = 0
  471. assistant.profile_photo_id = 999999
  472. assistant.add_time = 0
  473. assistant.vip_flag = 0
  474. assistant.isOnline = 1
  475. assistant.sex = 2
  476. assistant.role_id = 1
  477. assistant.role_name = "AI管家"
  478. assistant.career = 0
  479. assistant.intimacy = 0
  480. assistant.online_flag = 1
  481. assistant.turn = 0
  482. assistant.last_chat_time = 0
  483. table.insert(result,1,assistant)
  484. return result, count
  485. end
  486. --是否好友, 仇人, 黑名单
  487. function SocialityModel:IsRelaviveType( id, type )
  488. local list = self:GetRelativeInfoByType(type)
  489. for k,v in ipairs(list) do
  490. if v.role_id == id then
  491. return true
  492. end
  493. end
  494. end
  495. --获得和该玩家的亲密度
  496. function SocialityModel:GetIntimacyByRoleID(role_id,relavive_type)
  497. local temp_list = self:GetRelativeInfoByType(relavive_type)
  498. for i,v in ipairs(temp_list) do
  499. if v.role_id == role_id then
  500. return v.intimacy
  501. end
  502. end
  503. return 0
  504. end
  505. --根据亲密度获取花语等级
  506. function SocialityModel:GetLvByIntimacy( intimacy )
  507. local lv = #Config.Intimacylv
  508. for k,v in ipairs(Config.Intimacylv) do
  509. if v.intimacy > intimacy then
  510. lv = tonumber(v.lv) - 1
  511. break
  512. end
  513. end
  514. return lv
  515. end
  516. --获取最大亲密度等级
  517. function SocialityModel:GetMaxIntimacyLv( )
  518. return #Config.Intimacylv
  519. end
  520. function SocialityModel:GetMaxIntimacyByLv( lv )
  521. intimacy = 999999999
  522. for k,v in pairs(Config.Intimacylv) do
  523. if v.lv == lv+1 then
  524. intimacy = v.intimacy
  525. break
  526. end
  527. end
  528. return intimacy
  529. end
  530. --获取指定亲密等级的初始亲密度
  531. function SocialityModel:GetIntimacyByLv(lv)
  532. for k,v in pairs(Config.Intimacylv) do
  533. if v.lv == lv then
  534. return v.intimacy
  535. end
  536. end
  537. return nil
  538. end
  539. function SocialityModel:GetIntimacyAttrByLv( lv )
  540. local data = {}
  541. if lv then
  542. for k,v in pairs(Config.Intimacylv) do
  543. if v.lv == lv then
  544. data = stringtotable(v.attr)
  545. break
  546. end
  547. end
  548. end
  549. return data
  550. end
  551. --根据亲密度等级获取颜色
  552. function SocialityModel:GetColorByIntimacyLv( lv )
  553. local color_id = 0
  554. for k,v in pairs(Config.Intimacylv) do
  555. if v.lv == lv then
  556. color_id = v.color
  557. break
  558. end
  559. end
  560. return ColorUtil:GetGoodsColor(color_id),color_id
  561. end
  562. --播放送花特效
  563. function SocialityModel:PlayFlowerEffect(vo)
  564. if #self.flower_effect_list >= 20 then
  565. table.remove(self.flower_effect_list,1)
  566. table.insert(self.flower_effect_list,vo)
  567. else
  568. table.insert(self.flower_effect_list,vo)
  569. end
  570. self:Fire(SocialityModel.SHOW_FLOWER_EFFECT)
  571. end
  572. --获取当前名誉名字
  573. function SocialityModel:GetFameName( )
  574. local info = self:GetCharmInfo()
  575. local name = ""
  576. if info and info.fame then
  577. for i,v in ipairs(Config.Famelv) do
  578. if info.fame>=v.fame then
  579. name = v.name
  580. else
  581. break
  582. end
  583. end
  584. end
  585. return name
  586. end
  587. --获取当前名誉级别
  588. function SocialityModel:GetFameIndex( )
  589. local info = self:GetCharmInfo()
  590. local index = 1
  591. if info and info.fame then
  592. for i,v in ipairs(Config.Famelv) do
  593. if info.fame>=v.fame then
  594. index = v.lv
  595. else
  596. break
  597. end
  598. end
  599. end
  600. return index
  601. end
  602. function SocialityModel:GetFriendOnLine()
  603. local list = {}
  604. local friendList = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.friend)
  605. for i,v in ipairs(friendList) do
  606. if v.online_flag == 1 then
  607. table.insert(list,v)
  608. end
  609. end
  610. return list
  611. end
  612. function SocialityModel:GetVoById(type, role_id)
  613. local list = self:GetRelativeInfoByType(type)
  614. for i,v in ipairs(list) do
  615. if v.role_id == role_id then
  616. return v
  617. end
  618. end
  619. end
  620. function SocialityModel:GetVoByOnlyId(role_id)
  621. local list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.friend)
  622. for i,v in ipairs(list) do
  623. if v.role_id == role_id then
  624. return v
  625. end
  626. end
  627. list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.magee)
  628. for i,v in ipairs(list) do
  629. if v.role_id == role_id then
  630. return v
  631. end
  632. end
  633. -- list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.enemy)
  634. -- for i,v in ipairs(list) do
  635. -- if v.role_id == role_id then
  636. -- return v
  637. -- end
  638. -- end
  639. list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.black)
  640. for i,v in ipairs(list) do
  641. if v.role_id == role_id then
  642. return v
  643. end
  644. end
  645. end
  646. function SocialityModel:GetGiveList(new_list)
  647. local is_true = false
  648. local list = {}
  649. local friend_list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.friend)
  650. for i,v in pairs(new_list) do
  651. if v ~= nil then
  652. is_true = true
  653. break
  654. end
  655. end
  656. if not is_true then --new_list or #new_list <= 0 --判断table内有没有数据不能用# 可以用TableSize
  657. list = friend_list
  658. else
  659. table.insert(list, new_list)
  660. for i,v in ipairs(friend_list) do
  661. -- if v.role_id == new_list.role_id then
  662. -- table.remove(friend_list, i)
  663. -- end
  664. if v.role_id ~= new_list.role_id then --这里因为table的引用机制,所以不能用table.remove,会将关系列表中的好友删除
  665. table.insert(list, v)
  666. end
  667. end
  668. end
  669. -- table.insert(list, new_list)
  670. -- for i,v in ipairs(friend_list) do
  671. -- table.insert(list, v)
  672. -- end
  673. return list
  674. end
  675. function SocialityModel:GetRecentGiveFlowerInfo()
  676. if not self.receive_info.record_list or #self.receive_info.record_list < 0 then return end
  677. local has_record = false --先判断有没有送花记录先
  678. for i,v in pairs(self.receive_info.record_list) do
  679. if v and v.code == 1 then
  680. has_record = true
  681. break
  682. end
  683. end
  684. if has_record == false then return end
  685. local min_time_list = self.receive_info.record_list[1]
  686. for i,v in pairs(self.receive_info.record_list) do
  687. if (v.time >= min_time_list.time and v.code == 1) then
  688. min_time_list = v
  689. end
  690. end
  691. self.last_give_flower_info = min_time_list
  692. end
  693. function SocialityModel:GetSearchInfo()
  694. return self.search_info
  695. end
  696. function SocialityModel:SetLastGive(list)
  697. self.last_give_flower_info = list
  698. end
  699. function SocialityModel:GetLastInfo()
  700. return self.last_give_flower_info
  701. end
  702. --设置票券数据
  703. function SocialityModel:SetTicketsData(vo)
  704. self:ResetTickInfo()
  705. -------------------------
  706. self.tickets_send_count = vo.send_count
  707. self.tickets_gift_count = vo.gift_count
  708. for k,v in pairs(vo.send_info) do
  709. table.insert(self.send_role_list[v.type],v)
  710. end
  711. for k,v in pairs(vo.gift_info) do
  712. table.insert(self.gift_role_list[v.type],v)
  713. end
  714. self:Fire(SocialityModel.UPDATE_ALL_TICKETS_STATE)
  715. end
  716. --获取还没赠送票券的好友id列表
  717. function SocialityModel:GetCanSendTicketFriendIdList( )
  718. local need_id_list = {}
  719. local friend_list = DeepCopy(self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.friend))
  720. local arg = {"isOnline", "intimacy", "lv", "add_time"}
  721. local condition = {Array.UPPER, Array.UPPER, Array.UPPER, Array.LOWER,}
  722. SortTools.MoreKeysSorter(friend_list, arg, condition)
  723. local left_send_times = Config.Relaconfig[2].value-self.tickets_send_count
  724. local special_flag = left_send_times <= 0
  725. for i,v in ipairs(friend_list) do
  726. if v.role_id~=1 and not self:IsOneWayToFriend(v.role_id) and not self:IsInSendRoleList(v.role_id,SocialityModel.TicketType.Friend) and #need_id_list<left_send_times then
  727. table.insert(need_id_list,v.role_id)
  728. end
  729. end
  730. return need_id_list,special_flag
  731. end
  732. --获取还没领票券的好友id列表
  733. function SocialityModel:GetCanGetTicketFriendIdList( )
  734. local need_id_list = {}
  735. local friend_list = self:GetRelativeInfoByType(Config.ConfigSocial.RelativeType.friend)
  736. for i,v in ipairs(friend_list) do
  737. if v.role_id~=1 and not self:IsOneWayToFriend(v.role_id) and self:IsInGiftRoleList(v.role_id,SocialityModel.TicketType.Friend) then
  738. if self:GetTicketsGiftState(v.role_id) == 0 then
  739. table.insert(need_id_list,v.role_id)
  740. end
  741. end
  742. end
  743. return need_id_list
  744. end
  745. --判断是否送了该好友票券
  746. function SocialityModel:IsInSendRoleList(role_id,op_type)
  747. op_type = op_type or SocialityModel.TicketType.Friend
  748. for k,v in pairs(self.send_role_list[op_type]) do
  749. if role_id == v.role_id0 then
  750. return true
  751. end
  752. end
  753. return false
  754. end
  755. --判断该好友是否赠送了自己票券
  756. function SocialityModel:IsInGiftRoleList(role_id,op_type)
  757. op_type = op_type or SocialityModel.TicketType.Friend
  758. for k,v in pairs(self.gift_role_list[op_type]) do
  759. if role_id == v.role_id1 then
  760. return true
  761. end
  762. end
  763. return false
  764. end
  765. --收送票券后刷新票券状态
  766. function SocialityModel:UpdateTicketsState(state_type,role_id,op_type)
  767. op_type = op_type or SocialityModel.TicketType.Friend
  768. if state_type == 1 then--送票券之后
  769. local tb = {}
  770. tb.role_id0 = role_id
  771. table.insert(self.send_role_list[op_type],tb)
  772. if op_type == SocialityModel.TicketType.Friend then
  773. self.tickets_send_count = self.tickets_send_count+1 <= Config.Relaconfig[2].value and self.tickets_send_count+1 or Config.Relaconfig[2].value
  774. end
  775. elseif state_type == 2 then--领票券之后
  776. for k,v in pairs(self.gift_role_list[op_type]) do
  777. if role_id == v.role_id1 then
  778. v.val = 1
  779. end
  780. end
  781. if op_type == SocialityModel.TicketType.Friend then
  782. self.tickets_gift_count = self.tickets_gift_count+1 <= Config.Relaconfig[3].value and self.tickets_gift_count+1 or Config.Relaconfig[3].value
  783. end
  784. end
  785. end
  786. function SocialityModel:UpdateGiftRoleList(role_id,op_type)
  787. op_type = op_type or SocialityModel.TicketType.Friend
  788. local tb = {}
  789. tb.role_id1 = role_id
  790. tb.val = 0
  791. table.insert(self.gift_role_list[op_type],tb)
  792. end
  793. --获取该角色送礼给我的领取情况
  794. function SocialityModel:GetTicketsGiftState(role_id,op_type)
  795. op_type = op_type or SocialityModel.TicketType.Friend
  796. for k,v in pairs(self.gift_role_list[op_type]) do
  797. if role_id == v.role_id1 then
  798. return v.val
  799. end
  800. end
  801. end
  802. function SocialityModel:GetThankList( )
  803. return self.thank_list
  804. end
  805. function SocialityModel:SetThankList( value )
  806. self.thank_list[value] = value
  807. end
  808. function SocialityModel:AssistantSendMsg(msg)
  809. local mainVo = RoleManager.Instance.mainRoleInfo
  810. local info_assistant = {}
  811. info_assistant.channel = ChatModel.CHANNEL_CECRET
  812. info_assistant.ser_id = mainVo.server_id
  813. info_assistant.ser_num = 0
  814. info_assistant.ser_name = LoginController.Instance:GetPlatUserInfo().server_name
  815. info_assistant.player_list = {}
  816. local tb2 = {}
  817. tb2.player_id = mainVo.role_id
  818. tb2.name = mainVo.name
  819. tb2.level = mainVo.level
  820. tb2.career = mainVo.career
  821. tb2.dress_list = nil
  822. tb2.guild_id = mainVo.guild_id
  823. tb2.sex = mainVo.sex
  824. tb2.vip_flag = VipModel:getInstance():GetVipLevel()
  825. tb2.sup_vip_type = mainVo.sup_vip_type
  826. tb2.turn = mainVo.turn
  827. tb2.ser_id = mainVo.server_id
  828. -- tb2.picture_ver = mainVo.picture_ver
  829. -- tb2.picture = mainVo.picture
  830. tb2.profile_photo_id = mainVo.profile_photo_id
  831. -- ser_num = 0
  832. tb2.ser_name = LoginController.Instance:GetPlatUserInfo().server_name
  833. tb2.GM = mainVo.gm_flag
  834. local tb1 = {}
  835. tb1.player_id = 1
  836. tb1.name = "AI管家"
  837. tb1.level = 0
  838. tb1.career = 0
  839. tb1.dress_list = nil
  840. tb1.guild_id = 0
  841. tb1.sex = 2
  842. tb1.vip_flag = 0
  843. tb1.sup_vip_type = 0
  844. tb1.turn = 0
  845. tb1.ser_id = mainVo.server_id
  846. tb1.profile_photo_id = 999999
  847. -- ser_num = 0
  848. tb1.ser_name = LoginController.Instance:GetPlatUserInfo().server_name
  849. tb1.GM = 0
  850. table.insert(info_assistant.player_list,tb1)
  851. table.insert(info_assistant.player_list,tb2)
  852. info_assistant.msg = msg
  853. info_assistant.time = TimeUtil:getServerTime()
  854. ChatModel:getInstance():AddMsg(info_assistant)
  855. ChatModel:getInstance():Fire(ChatModel.CHANGE_CHANNEL_SEND_INTERVAL, info_assistant)
  856. ChatModel:getInstance():Fire(ChatModel.UPDATE_SEND_TIME)
  857. ChatModel:getInstance():AddMainRoleChatContent(info_assistant.msg, info_assistant.player_id)
  858. local player_id = info_assistant.player_list[1].player_id --取出私聊对象的id
  859. if player_id ~= RoleManager.Instance.mainRoleInfo.role_id then
  860. --收到私聊消息后更新和该好友的最后私聊时间
  861. SocialityModel:getInstance():UpdateLastChatTime(player_id,info_assistant.time)
  862. ChatModel:getInstance():SetChatInfo(true,info_assistant)
  863. ChatModel:getInstance():SetPriateChatInfo(info_assistant)--存储私聊对象的消息
  864. SocialityModel:getInstance():Fire(SocialityModel.REFRESH_SUB_BTN_RED)--刷新subBtn红点
  865. GlobalEventSystem:Fire(EventName.REFRESH_SOCIAL_RED_DOT)--更新外部红点
  866. end
  867. end
  868. function SocialityModel:SetSpGiftLimitData(vo)
  869. self.sp_gift_limit_data = vo.goods_list
  870. end
  871. function SocialityModel:GetSpGiftLimitData( )
  872. return self.sp_gift_limit_data
  873. end