KLFriendOperatePanel.lua 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. ---@class KLFriendOperatePanel:UIKmlLuaPanelBase
  2. ---@field view KLFriendOperatePanelView
  3. ---@field friendInfo FriendProto.FriendInfo
  4. ---@field role UserProtos.RoleInfo
  5. ---@field uiType number @ 1:通用 2:组队
  6. local KLFriendOperatePanel = class(UIKmlLuaPanelBase)
  7. local this =KLFriendOperatePanel
  8. ---创建时调用一次
  9. function this:Init()
  10. if self.args.pos then
  11. GUI:SetWorldPosition(self.view.BgBor,self.args.pos.x,self.args.pos.y,self.args.pos.z)
  12. end
  13. self.rid = self.args.rid
  14. self.name = self.args.name
  15. self.role = nil
  16. self.uiType = self.args.uiType or 1
  17. GUI:setVisible(self.view.BtnGrid, false)
  18. if self.rid == SL:GetMetaValue(EMetaVarGetKey.UID) then
  19. self.isMe = true
  20. self:ResOtherRoleInfoMessage(nil, { type = 1, role = self.args.roleInfo })
  21. else
  22. self.isMe = false
  23. SL.Friend:ReqOtherRoleInfoMessage(self.rid, 1)
  24. end
  25. end
  26. ---创建或者刷新界面数据时调用
  27. function this:Refresh()
  28. end
  29. ---显示玩家数据
  30. ---@param friendInfo UserProtos.RoleInfo
  31. function this:ShowPlayInfo(friendInfo)
  32. GUI:Image_loadTexture(self.view.SpPlayer,"1"..friendInfo.career.baseCareer,"Atlas/MUIcon.spriteatlas")
  33. GUI:Text_setString(self.view.TxtLevel,"等级:"..friendInfo.level)
  34. ---@type cfg_career_column
  35. local careerTbl = SL:GetConfigMultiKeys("cfg_career", friendInfo.career.baseCareer
  36. , friendInfo.career.careerRank, "baseCareer", "careerRank")
  37. GUI:Text_setString(self.view.TxtCareer, careerTbl.name)
  38. GUI:Text_setString(self.view.TxtName, friendInfo.name)
  39. GUI:Text_setTextColor(self.view.TxtName,"#E6E600")
  40. GUI:Text_setString(self.view.TxtUnion,friendInfo.roleInfoExt.unionName.." "..EUnionPositionToName[friendInfo.roleInfoExt.position])
  41. end
  42. ---注册UI事件和服务器消息
  43. function this:RegistEvents()
  44. SL:RegisterLuaNetMsg(MessageDef.ResOtherRoleInfoMessage, self.ResOtherRoleInfoMessage, self)
  45. GUI:AddOnClickEvent(self.view.BtnViewPlayer, self, self.ShowPlayerEquips)
  46. GUI:AddOnClickEvent(self.view.BtnClose, self, self.CloseMe)
  47. GUI:AddOnClickEvent(self.view.BtnAddFriend, self, self.AddOrRemoveFriend, true)
  48. GUI:AddOnClickEvent(self.view.BtnDelFriend, self, self.AddOrRemoveFriend, false)
  49. GUI:AddOnClickEvent(self.view.BtnAddBlack, self, self.AddOrRemoveBlack, true)
  50. GUI:AddOnClickEvent(self.view.BtnRemoveBlack, self, self.AddOrRemoveBlack, false)
  51. GUI:AddOnClickEvent(self.view.BtnPrivateChat, self, self.PrivateChat)
  52. GUI:AddOnClickEvent(self.view.BtnUnionInvite, self, self.BtnUnionInvite)
  53. GUI:AddOnClickEvent(self.view.BtnUnionReq, self, self.BtnUnionReq)
  54. GUI:AddOnClickEvent(self.view.BtnTeamInvite, self, self.TeamInvite)
  55. GUI:AddOnClickEvent(self.view.BtnTeamReq, self, self.TeamReq)
  56. GUI:AddOnClickEvent(self.view.BtnTeamLeader, self, self.BtnTeamLeader)
  57. GUI:AddOnClickEvent(self.view.BtnTeamKickOff, self, self.BtnTeamKickOff)
  58. GUI:AddOnClickEvent(self.view.BtnLeaveTeam, self, self.BtnLeaveTeam)
  59. GUI:AddOnClickEvent(self.view.lockButton, self, self.ShowPlayerEquips)
  60. GUI:AddOnClickEvent(self.view.selectPlayerButton, self, self.OnClickSelectPlayerButton)
  61. GUI:AddOnClickEvent(self.view.reqPointButton, self, self.OnClickReqPointButton)
  62. GUI:AddOnClickEvent(self.view.joinButton, self, self.OnClickJoinTeamButton)
  63. GUI:AddOnClickEvent(self.view.BtnFlowerSend, self, self.OnClickSendFlower)
  64. end
  65. function this:OnClickSendFlower()
  66. GUI:UIPanel_Open("dev/outui/FriendSys/Panel/KLFriendFlowerSend/KLFriendFlowerSendPanel", nil, nil,
  67. {rid = self.rid})
  68. --SL:SendLuaNetMsg(LuaMessageIdToSever.FRIEND_SEND_FLOWERS, {61200001, self.rid})
  69. end
  70. function this:CloseMe()
  71. if self.uiType == 2 then
  72. SL:onLUAEvent(Event.CloseTeamTipsUI)
  73. end
  74. GUI:UIPanel_Close(self.filePath)
  75. end
  76. ---选择玩家
  77. function this:OnClickSelectPlayerButton()
  78. SL:OpenBossHp(self.rid)
  79. self:CloseMe()
  80. end
  81. ---发送位置
  82. function this:OnClickReqPointButton()
  83. local x = SL:MeData_GetCoord().x
  84. local y = SL:MeData_GetCoord().z
  85. local mapId = SL:GetMetaValue(EMetaVarGetKey.MAP_ID)
  86. local line = SL:GetMetaValue(EMetaVarGetKey.MAP_LINE)
  87. local posStr = string.format("pos@%s,%s,%s,%s@",x,y,mapId,line)
  88. SL:SendChat(7,posStr,nil,nil)
  89. self:CloseMe()
  90. end
  91. ---加入队伍
  92. function this:OnClickJoinTeamButton()
  93. if self.otherPlayerTeamId and self.otherPlayerTeamId > 0 then
  94. SL:RequestApplyAgree(self.otherPlayerTeamId)
  95. self:CloseMe()
  96. end
  97. end
  98. function this:ShowPlayerEquips()
  99. --角色装备信息
  100. GUI:UIPanel_Open("dev/ui/Equip/Panel/KLEquipUI/KLEquipUIPanel", _, _, {
  101. isOther = true,
  102. rid = self.rid,
  103. x = 0,
  104. isHideMainUI = self.args.isHideMainUI
  105. })
  106. self:CloseMe()
  107. end
  108. --添加或删除好友
  109. function this:AddOrRemoveFriend(_, isAdd)
  110. if isAdd then
  111. SL:AddFriend(self.rid)
  112. else
  113. SL:DelFriend(self.rid)
  114. end
  115. self:CloseMe()
  116. end
  117. --添加或移除黑名单
  118. function this:AddOrRemoveBlack(_, isAdd)
  119. if isAdd then
  120. SL:AddBlackList(self.rid)
  121. else
  122. SL:DelBlackList(self.rid)
  123. end
  124. self:CloseMe()
  125. end
  126. --私聊
  127. function this:PrivateChat()
  128. GUI:UIPanel_Close("dev/ui/FriendSys/Panel/KLFriendMain/KLFriendMainPanel")
  129. SL:CloseChatUI()
  130. SL:OpenChatUI({channel=8,rid=self.rid,name=self.name,isHide=self.isHideMainPanel or self.args.isHideMainUI})
  131. self:CloseMe()
  132. end
  133. --邀请加入战盟
  134. function this:BtnUnionInvite()
  135. end
  136. --申请加入战盟
  137. function this:BtnUnionReq()
  138. end
  139. --邀请入队
  140. function this:TeamInvite()
  141. if self.role then
  142. if SL:MeData_GetTeamId() == 0 then
  143. SL:TipMessage(SL:GetConfig('cfg_string',22).text, 1, NoticeType.NoticeMid)--请先创建队伍
  144. return
  145. end
  146. --local isFriend = SL:CheckIsFriend(self.rid)
  147. if self.role.roleInfoExt.unionId ~= 0 and self.role.roleInfoExt.unionId == SL:MeData_GetUnionId() then
  148. SL:ReqSendTeamInvitation(self.rid, 3)
  149. else
  150. SL:ReqSendTeamInvitation(self.rid)
  151. end
  152. self:CloseMe()
  153. end
  154. end
  155. --申请入队
  156. function this:TeamReq()
  157. if self.role and self.role.roleInfoExt.teamId > 0 then
  158. SL:RequestApplyAgree(self.role.roleInfoExt.teamId)
  159. self:CloseMe()
  160. end
  161. end
  162. ---升为队长
  163. function this:BtnTeamLeader()
  164. SL:ReqChangeCaptain(self.rid)
  165. self:CloseMe()
  166. end
  167. ---踢出队伍
  168. function this:BtnTeamKickOff()
  169. SL:ReqKickOutMember(self.rid)
  170. self:CloseMe()
  171. end
  172. ---离开队伍
  173. function this:BtnLeaveTeam()
  174. SL:ReqQuitTeam()
  175. self:CloseMe()
  176. end
  177. ---@param message UserProtos.OtherRoleInfoRes
  178. function this:ResOtherRoleInfoMessage(id, message)
  179. self:HideAllButton()
  180. self.isHideMainPanel = false
  181. if message.type == 1 and self.rid == message.role.rid then
  182. self.role = message.role
  183. self.name = message.role.name
  184. --角色基本信息
  185. self:ShowPlayInfo(message.role)
  186. local rid = message.role.rid
  187. if self.uiType == 1 then
  188. --查看装备
  189. GUI:setVisible(self.view.BtnViewPlayer, true)
  190. --私聊
  191. GUI:SetActive(self.view.BtnPrivateChat,true)
  192. --黑名单
  193. local inBlack = SL:CheckIsInBlackList(rid)
  194. if inBlack then
  195. GUI:setVisible(self.view.BtnRemoveBlack, true)
  196. else
  197. GUI:setVisible(self.view.BtnAddBlack, true)
  198. end
  199. --好友
  200. local isFriend = SL:CheckIsFriend(rid)
  201. if isFriend then
  202. GUI:setVisible(self.view.BtnDelFriend, true)
  203. else
  204. --不是好友且不在黑名单,才显示添加好友
  205. if not inBlack then
  206. GUI:setVisible(self.view.BtnAddFriend, true)
  207. end
  208. end
  209. --战盟
  210. local inUnion = not string.isNullOrEmpty(message.role.roleInfoExt.unionName)
  211. local meInUnion = not string.isNullOrEmpty(SL:GetMetaValue(EMetaVarGetKey.UNION_NAME))
  212. if inUnion then
  213. --对方已有战盟
  214. --GUI:setVisible(self.view.BtnUnionReq, true)
  215. elseif not inUnion and meInUnion then
  216. --对方无战盟 我有战盟 显示战盟邀请
  217. --GUI:setVisible(self.view.BtnUnionInvite, true)
  218. end
  219. --队伍
  220. local inTeam = message.role.roleInfoExt.teamId > 0
  221. local meInTeam = SL:MeData_GetTeamId() > 0
  222. if inTeam and not meInTeam then
  223. --对方已组队且我无队伍
  224. GUI:setVisible(self.view.BtnTeamReq, true)
  225. elseif meInTeam then
  226. if inTeam then
  227. --对方有队伍且不是跟我同队
  228. GUI:setVisible(self.view.BtnTeamInvite, message.role.roleInfoExt.teamId ~= SL:MeData_GetTeamId())
  229. else
  230. --我有队伍皆显示邀请组队
  231. GUI:setVisible(self.view.BtnTeamInvite, true)
  232. end
  233. end
  234. elseif self.uiType == 2 then
  235. self.isHideMainPanel = true
  236. local leaderId, teamId
  237. if self.isMe then
  238. leaderId = SL:TeamInfo_GetLeaderId()
  239. teamId = SL:TeamInfo_GetTeamId()
  240. else
  241. teamId = message.role.roleInfoExt.teamId
  242. if teamId == SL:MeData_GetTeamId() and teamId ~= 0 then
  243. leaderId = SL:TeamInfo_GetLeaderId()
  244. end
  245. end
  246. if SL:MeData_GetTeamId() > 0 then
  247. --是自己
  248. if self.rid == SL:GetMetaValue(EMetaVarGetKey.UID) then
  249. GUI:SetActive(self.view.BtnLeaveTeam,true)
  250. GUI:SetActive(self.view.reqPointButton,true)
  251. return
  252. end
  253. if teamId == SL:MeData_GetTeamId() then
  254. --队长点击队员
  255. if leaderId and leaderId == SL:GetMetaValue(EMetaVarGetKey.UID) then
  256. GUI:SetActive(self.view.BtnTeamKickOff,true)
  257. GUI:SetActive(self.view.BtnTeamLeader,true)
  258. GUI:SetActive(self.view.BtnPrivateChat,true)
  259. GUI:SetActive(self.view.lockButton,true)
  260. GUI:SetActive(self.view.selectPlayerButton,true)
  261. return
  262. else
  263. GUI:SetActive(self.view.lockButton,true)
  264. GUI:SetActive(self.view.selectPlayerButton,true)
  265. GUI:SetActive(self.view.BtnPrivateChat,true)
  266. return
  267. end
  268. else
  269. --不同队伍邀请玩家
  270. GUI:SetActive(self.view.BtnTeamInvite,true)
  271. GUI:SetActive(self.view.lockButton,true)
  272. GUI:SetActive(self.view.BtnPrivateChat,true)
  273. return
  274. end
  275. end
  276. self.otherPlayerTeamId = teamId
  277. GUI:SetActive(self.view.joinButton,teamId > 0)
  278. GUI:SetActive(self.view.lockButton,true)
  279. GUI:SetActive(self.view.BtnPrivateChat,true)
  280. end
  281. end
  282. end
  283. ---隐藏所有按钮
  284. function this:HideAllButton()
  285. GUI:setVisible(self.view.BtnGrid, true)
  286. GUI:setVisible(self.view.BtnViewPlayer, false)
  287. GUI:setVisible(self.view.BtnUnionInvite, false)
  288. GUI:setVisible(self.view.BtnAddFriend, false)
  289. GUI:setVisible(self.view.BtnDelFriend, false)
  290. GUI:setVisible(self.view.BtnUnionReq, false)
  291. GUI:setVisible(self.view.BtnPrivateChat, false)
  292. GUI:setVisible(self.view.BtnAddBlack, false)
  293. GUI:setVisible(self.view.BtnRemoveBlack, false)
  294. GUI:setVisible(self.view.BtnTeamInvite, false)
  295. GUI:setVisible(self.view.BtnTeamReq, false)
  296. GUI:setVisible(self.view.BtnTeamLeader, false)
  297. GUI:setVisible(self.view.BtnTeamKickOff, false)
  298. GUI:setVisible(self.view.BtnLeaveTeam, false)
  299. GUI:setVisible(self.view.lockButton, false)
  300. GUI:setVisible(self.view.selectPlayerButton, false)
  301. GUI:setVisible(self.view.reqPointButton, false)
  302. GUI:setVisible(self.view.joinButton, false)
  303. end
  304. function this:Close()
  305. end
  306. return this