FuncDockProxy.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. local RemoteProxy = requireProxy("remote/RemoteProxy")
  2. local FuncDockProxy = class("FuncDockProxy", RemoteProxy)
  3. FuncDockProxy.NAME = global.ProxyTable.FuncDockProxy
  4. local cjson = require("cjson")
  5. FuncDockProxy.FuncDockType = {
  6. Func_Player_Head = 1, --点击玩家头像
  7. Func_Friend = 2, --好友界面
  8. Func_Team = 3, --左侧组队导航栏
  9. Func_Guild = 4, --行会界面
  10. Func_Friend_Recent = 5, --好友最近联系界面
  11. Func_Friend_Enemy = 6, --好友仇敌界面
  12. Func_Friend_BlackList = 7, --好友黑名单界面
  13. Func_TeamLayer = 8, --组队界面
  14. Func_Monster_Head = 9, --点击人形怪头像
  15. Func_Near_Player = 10, --附近玩家
  16. }
  17. FuncDockProxy.BtnOperatorType = {
  18. look_role = 1, --查看玩家
  19. add_friend = 2, --添加好友
  20. chat = 3, --私聊
  21. team = 4, --组队
  22. trade = 5, --交易
  23. invite_team = 6, --邀请入队
  24. invite_guild = 7, --邀请入会
  25. apply_team = 8, --申请入队
  26. out_team = 10,--踢出队伍
  27. set_teamLeader = 11,--升为队长
  28. add_blacklist = 12,--拉黑
  29. out_guild = 13, --踢出行会
  30. call_teammate = 14, --召集队员
  31. send_position = 15, --发送位置
  32. exit_team = 16, --退出队伍
  33. out_blacklist = 21, --踢出黑名单
  34. delete_friend = 22, --删除好友
  35. challenge = 24, --挑战
  36. horse_invite = 25, --骑马邀请
  37. appoint_rank1 = 101, --转移会长
  38. appoint_rank2 = 102, --任命副会
  39. appoint_rank3 = 103, --行会 任命职位
  40. appoint_rank4 = 104, --行会 任命职位
  41. appoint_rank5 = 105, --行会 任命职位
  42. }
  43. local FuncType = FuncDockProxy.FuncDockType
  44. local BtnType = FuncDockProxy.BtnOperatorType
  45. function FuncDockProxy:ctor()
  46. FuncDockProxy.super.ctor(self)
  47. self._targetName = ""
  48. self._targetId = nil
  49. self._targetType = nil
  50. self._playerBasic = nil --查看玩家的基础信息
  51. end
  52. function FuncDockProxy:clean()
  53. self._targetName = ""
  54. self._targetId = nil
  55. self._targetType = nil
  56. self._playerBasic = nil
  57. end
  58. function FuncDockProxy:SetTargetName(name)
  59. self._targetName = name
  60. end
  61. function FuncDockProxy:GetTargetName()
  62. return self._targetName
  63. end
  64. function FuncDockProxy:SetTargetId(id)
  65. self._targetId = id
  66. end
  67. function FuncDockProxy:GetTargetId()
  68. return self._targetId
  69. end
  70. function FuncDockProxy:SetTargetType(posType)
  71. self._targetType = posType
  72. end
  73. function FuncDockProxy:GetTargetType()
  74. return self._targetType
  75. end
  76. function FuncDockProxy:SetPlayerBasic(data)
  77. self._playerBasic = data
  78. end
  79. function FuncDockProxy:GetPlayerBasic()
  80. return self._playerBasic
  81. end
  82. function FuncDockProxy:CanOpen(data)
  83. if global.gamePlayerController:GetMainPlayerID() == data.targetId and (data.type ~= FuncType.Func_Team and data.type ~= FuncType.Func_TeamLayer) then
  84. return false
  85. end
  86. return true
  87. end
  88. function FuncDockProxy:IsShowBtn(type, index)
  89. local TeamProxy = global.Facade:retrieveProxy(global.ProxyTable.TeamProxy)
  90. local GuildProxy = global.Facade:retrieveProxy(global.ProxyTable.GuildProxy)
  91. local GuildPlayerProxy = global.Facade:retrieveProxy(global.ProxyTable.GuildPlayerProxy)
  92. local FriendProxy = global.Facade:retrieveProxy(global.ProxyTable.FriendProxy)
  93. local PlayerPropertyProxy = global.Facade:retrieveProxy(global.ProxyTable.PlayerProperty)
  94. -- 英雄,只有查看
  95. local target = global.actorManager:GetActor(self._targetId)
  96. if target and target:IsHero() and BtnType.look_role ~= index then
  97. return false
  98. end
  99. local show = true
  100. if type == FuncType.Func_Team or type == FuncType.Func_TeamLayer then
  101. if global.gamePlayerController:GetMainPlayerID() == self._targetId then
  102. show = BtnType.call_teammate == index or BtnType.send_position == index or BtnType.exit_team == index
  103. else
  104. if BtnType.call_teammate == index or BtnType.send_position == index or BtnType.exit_team == index then
  105. show = false
  106. elseif BtnType.set_teamLeader == index or BtnType.out_team == index then
  107. show = TeamProxy:IsTeamLeader()
  108. end
  109. end
  110. elseif type == FuncType.Func_Guild then
  111. local isMaster = GuildPlayerProxy:IsMaster()
  112. local isChairman = GuildPlayerProxy:IsChairman()
  113. local info = GuildProxy:getMemberByUID(self._targetId)
  114. local rank = info.Rank
  115. if BtnType.appoint_rank2 == index or BtnType.appoint_rank4 == index or BtnType.appoint_rank3 == index or BtnType.appoint_rank1 == index
  116. or BtnType.appoint_rank5 == index then
  117. show = false
  118. if isChairman and info and info.Rank then
  119. if isMaster then
  120. show = true
  121. else
  122. if BtnType.appoint_rank3 == index then
  123. show = rank ~= GuildPlayerProxy.GuildRank.elite and not GuildPlayerProxy:IsChairman(rank)
  124. elseif BtnType.appoint_rank4 == index then
  125. show = rank ~= GuildPlayerProxy.GuildRank.member and not GuildPlayerProxy:IsChairman(rank)
  126. elseif BtnType.appoint_rank5 == index then
  127. show = rank ~= GuildPlayerProxy.GuildRank.rank5 and not GuildPlayerProxy:IsChairman(rank)
  128. elseif BtnType.appoint_rank2 == index then
  129. show = false
  130. end
  131. end
  132. end
  133. end
  134. if BtnType.out_guild == index then
  135. show = isMaster or (isChairman and not GuildPlayerProxy:IsChairman(rank))
  136. elseif BtnType.invite_team == index then
  137. show = info.Online == 1
  138. end
  139. elseif type == FuncType.Func_Player_Head then
  140. if not FriendProxy:isInBlacklist( self._targetId ) then
  141. if BtnType.invite_team == index then
  142. if self._playerBasic and self._playerBasic.group == 1 then
  143. show = false
  144. end
  145. elseif BtnType.apply_team == index then
  146. if (self._playerBasic and self._playerBasic.group == 0) or TeamProxy:GetMemberCount() > 0 then
  147. show = false
  148. end
  149. elseif BtnType.invite_guild == index then
  150. if (self._playerBasic and self._playerBasic.guild) or not GuildPlayerProxy:IsJoinGuild() then
  151. show = false
  152. end
  153. end
  154. else
  155. show = false
  156. if BtnType.look_role == index then
  157. show = true
  158. end
  159. end
  160. if BtnType.look_role == index and target and target:IsHumanoid() then --人形怪
  161. local disHeadLookHumanoid = tonumber(SL:GetMetaValue("GAME_DATA","disHeadLookHumanoid")) == 1
  162. if disHeadLookHumanoid then
  163. show = false
  164. end
  165. end
  166. end
  167. if index == BtnType.add_friend then
  168. show = not FriendProxy:getFriendDataByUid( self._targetId ) and PlayerPropertyProxy:GetRoleUID() ~= self._targetId
  169. elseif index == BtnType.add_blacklist then
  170. --拉黑
  171. show = not FriendProxy:isInBlacklist( self._targetId )
  172. elseif index == BtnType.out_blacklist then
  173. --移除黑名单
  174. show = FriendProxy:isInBlacklist( self._targetId )
  175. elseif BtnType.invite_team == index then
  176. if TeamProxy:IsTeamMember(self._targetId) then
  177. show = false
  178. end
  179. elseif BtnType.trade == index then
  180. if tonumber(SL:GetMetaValue("GAME_DATA","CloseTradeFunc")) == 1 then
  181. show = false
  182. end
  183. elseif BtnType.horse_invite == index then --骑马邀请
  184. local mainActor = global.gamePlayerController:GetMainPlayer()
  185. if not mainActor or (mainActor and not mainActor:IsDoubleHorse()) then --不是双人坐骑
  186. show = false
  187. end
  188. local targetActor = global.actorManager:GetActor(self._targetId)
  189. if not targetActor or not targetActor:IsPlayer() then
  190. show = false
  191. end
  192. if mainActor and mainActor:IsDoubleHorse() and mainActor:GetHorseCopilotID() then --双人坐骑已满
  193. show = false
  194. end
  195. end
  196. return show
  197. end
  198. --队伍召集令
  199. function FuncDockProxy:TeamCallFunc()
  200. local PayProxy = global.Facade:retrieveProxy(global.ProxyTable.PayProxy)
  201. local TeamProxy = global.Facade:retrieveProxy(global.ProxyTable.TeamProxy)
  202. local memberCount = TeamProxy:GetMemberCount()
  203. if memberCount <= 0 then
  204. global.Facade:sendNotification(global.NoticeTable.SystemTips, GET_STRING(50000260))
  205. return
  206. elseif memberCount == 1 then
  207. global.Facade:sendNotification(global.NoticeTable.SystemTips, GET_STRING(50000263))
  208. return
  209. end
  210. local itemIndex = SL:GetMetaValue("GAME_DATA","Team_assembled") or 3020001
  211. local costDataParam = {
  212. itemID = itemIndex,
  213. itemNum = 1,
  214. }
  215. if PayProxy:CheckItemCountEX(costDataParam) then
  216. local data = {}
  217. data.btnType = 2
  218. data.str = GET_STRING( 50000262 )
  219. data.callback = function(type ,custom)
  220. if 1 == type then
  221. UseItemByIndex(itemIndex)
  222. end
  223. end
  224. global.Facade:sendNotification( global.NoticeTable.Layer_CommonTips_Open, data )
  225. end
  226. end
  227. function FuncDockProxy:onRegister()
  228. FuncDockProxy.super.onRegister(self)
  229. end
  230. function FuncDockProxy:requestLookStatus(uid,isHero)
  231. local hero = isHero and 1 or 0
  232. LuaSendMsg(global.MsgType.MSG_SC_LOOK_STATUS_REQUEST, hero, 0, 0, 0, uid, string.len(uid))
  233. end
  234. local function handle_MSG_SC_LOOK_STATUS_RESPONSE(msg)
  235. local header = msg:GetHeader()
  236. local len = msg:GetDataLength()
  237. if header.recog == -1 then
  238. --不在线
  239. global.Facade:sendNotification(global.NoticeTable.SystemTips, GET_STRING(1009))
  240. return
  241. end
  242. if len > 0 then
  243. local data = msg:GetData()
  244. local sliceStr = data:ReadString(len)
  245. local cjson = require("cjson")
  246. local jsonData = cjson.decode(sliceStr)
  247. if not jsonData then
  248. return
  249. end
  250. dump(jsonData)
  251. global.Facade:sendNotification(global.NoticeTable.Layer_Func_Dock_Response, jsonData)
  252. end
  253. end
  254. function FuncDockProxy:RegisterMsgHandler()
  255. FuncDockProxy.super.RegisterMsgHandler(self)
  256. local msgType = global.MsgType
  257. LuaRegisterMsgHandler(msgType.MSG_SC_LOOK_STATUS_RESPONSE, handle_MSG_SC_LOOK_STATUS_RESPONSE)
  258. end
  259. return FuncDockProxy