GemSlateInfo.lua 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. ---@class GemSlateInfo
  2. GemSlateInfo = class()
  3. local this = GemSlateInfo
  4. function this:ctor()
  5. end
  6. function this:Reset()
  7. self:ResetData()
  8. end
  9. function this:Init()
  10. self:ResetData()
  11. self:InitData()
  12. self:RegistMessages()
  13. end
  14. ---重置数据
  15. function this:ResetData()
  16. self.curActiveScheme="1"
  17. self.OtherPlayerCurActiveScheme="1"
  18. self.curGemPosId="1"
  19. self.curEquipPosId="1"
  20. self.curOptEquip=nil
  21. self.AllSchemeData=nil
  22. self.OtherPlayerAllSchemeData=nil
  23. self.Group2AllLevel={}
  24. self.ActiveGemSuitCfgTbl={}
  25. self.AllGemSuitCfgTbl={}
  26. self.maxLevelActiveGroupSuitCfgLst={}
  27. local canInlayGemEquipPosTbl = SL:GetConfig("cfg_global", 12001)
  28. self.CanInlayGemEquipPosTbl = string.split(canInlayGemEquipPosTbl.value, "#")
  29. local canInlaySlateEquipPosTbl = SL:GetConfig("cfg_global", 12002)
  30. self.CanInlaySlateEquipPosTbl = string.split(canInlaySlateEquipPosTbl.value, "#")
  31. end
  32. function this:InitData()
  33. end
  34. function this:RegistMessages()
  35. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_GEM_SCHEME,self.DealWithAllSchemeInfoMsg,self)
  36. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_GEM_CURRENT_SCHEME,self.DealWithCurSchemeInfoMsg,self)
  37. SL:RegisterLuaNetMsg(LuaMessageIdToClient.RES_GEM_RECOVERY_HP_INFO,self.RES_GEM_RECOVERY_HP_INFO,self)
  38. SL:RegisterLUAEvent(LUA_EVENT_LOGIN_MAP, self.LUA_EVENT_LOGIN_MAP, self) --登录进入地图 刷新萤石
  39. end
  40. function this:RES_GEM_RECOVERY_HP_INFO(_,message)
  41. if not message then
  42. return
  43. end
  44. SL:PlayHurt(message["text"],message["hurtType"],message["targetId"])
  45. end
  46. function this:DealWithAllSchemeInfoMsg(_,message)
  47. if not message then
  48. return
  49. end
  50. if message == "" then
  51. return
  52. end
  53. if not message.data then
  54. return
  55. end
  56. self.OtherPlayerAllSchemeData = nil
  57. --是否是其他玩家
  58. local my_rid = SL:GetMetaValue(EMetaVarGetKey.USER_ID)
  59. --local isOtherPlayer = message.rid and SL:GetMetaValue(EMetaVarGetKey.ACTOR_IS_NETPLAYER,message.rid)
  60. --if isOtherPlayer then
  61. local rid = nil
  62. if message.rid then
  63. rid = tostring(message.rid)
  64. end
  65. if rid and my_rid ~= rid then
  66. self.OtherPlayerAllSchemeData = message.data
  67. self.OtherPlayerCurActiveScheme = tostring(message.cur)
  68. SL:onLUAEvent(LUA_EVENT_REFRESH_GEM_SLATE_INFO,message.rid)
  69. return
  70. end
  71. self.curActiveScheme=tostring(message.cur)
  72. self.AllSchemeData=message.data
  73. self:UpdateAllGemsSuitAttrInfo()
  74. SL:onLUAEvent(LUA_EVENT_REFRESH_GEM_SLATE_INFO,my_rid)
  75. end
  76. function this:DealWithCurSchemeInfoMsg(_,message)
  77. if not message then
  78. return
  79. end
  80. if message == "" then
  81. return
  82. end
  83. if not self.AllSchemeData then
  84. return
  85. end
  86. self.curActiveScheme=tostring(message.pos)
  87. self.AllSchemeData[tostring(message.pos)]=message
  88. self:UpdateAllGemsSuitAttrInfo()
  89. SL:onLUAEvent(LUA_EVENT_REFRESH_GEM_SLATE_INFO)
  90. end
  91. function this:ReqInlayGem(gemCfgId,gemId)
  92. local bagIndex=SL:GetBagIndex(gemId)
  93. if not self.curOptEquip or not gemId or not bagIndex then
  94. SL:TipMessage( SL:GetConfig("cfg_string",329).text ,3, NoticeType.NoticeLeftBottom )
  95. -- logError("当期操作的装备数据为空")
  96. return
  97. end
  98. local wearBarId, pos = SL:GetEquipWearBarIdPos(self.curOptEquip.id)
  99. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GEM_PUT_ON,{schemepos=self.curActiveScheme,idxOfBag=bagIndex,idxOfEquip=self:GetIdxOfEquip(pos, self.curGemPosId)})
  100. end
  101. function this:ReqUnloadGem()
  102. if not self.curOptEquip then
  103. SL:TipMessage( SL:GetConfig("cfg_string",329).text ,3, NoticeType.NoticeLeftBottom )
  104. -- logError("当期操作的装备数据为空")
  105. return
  106. end
  107. local wearBarId, pos = SL:GetEquipWearBarIdPos(self.curOptEquip.id)
  108. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GEM_TAKE_OFF,{schemepos=self.curActiveScheme,idxOfEquip=self:GetIdxOfEquip(pos, self.curGemPosId)})
  109. end
  110. function this:ChangeGemPosId(gemPosId)
  111. self.curGemPosId=gemPosId
  112. end
  113. function this:ChangeEquipPosId(equipPosId)
  114. self.curEquipPosId=tostring(equipPosId)
  115. end
  116. function this:GetIdxOfEquip(pos,gemWearCellId)
  117. if not gemWearCellId then
  118. return pos
  119. end
  120. return gemWearCellId << 16 | pos
  121. end
  122. function this:SetOptEquip(equip)
  123. self.curOptEquip=equip
  124. end
  125. function this:GetCurActiveSchemeGem(gemPos,isSlate)
  126. if not self.curEquipPosId then
  127. return
  128. end
  129. if not self.AllSchemeData then
  130. return
  131. end
  132. if not self.AllSchemeData[self.curActiveScheme] then
  133. return
  134. end
  135. if not self.AllSchemeData[self.curActiveScheme].scheme[self.curEquipPosId] then
  136. return
  137. end
  138. if not isSlate then
  139. if not self.AllSchemeData[self.curActiveScheme].scheme[self.curEquipPosId].gems or not self.AllSchemeData[self.curActiveScheme].scheme[self.curEquipPosId].gems[gemPos] then
  140. return
  141. end
  142. return self.AllSchemeData[self.curActiveScheme].scheme[self.curEquipPosId].gems[gemPos]
  143. else
  144. if not self.AllSchemeData[self.curActiveScheme].scheme[self.curEquipPosId].stone then
  145. return
  146. end
  147. return self.AllSchemeData[self.curActiveScheme].scheme[self.curEquipPosId].stone
  148. end
  149. end
  150. function this:GetCurActiveSchemeGemState()
  151. if not self.curEquipPosId then
  152. return
  153. end
  154. if not self.AllSchemeData then
  155. return
  156. end
  157. if not self.AllSchemeData[self.curActiveScheme] then
  158. return
  159. end
  160. if not self.AllSchemeData[self.curActiveScheme].scheme[self.curEquipPosId] then
  161. return
  162. end
  163. return self.AllSchemeData[self.curActiveScheme].scheme[self.curEquipPosId].active
  164. end
  165. function this:GetCurActiveSchemeGemByEquipPos(gemPos,equipPos,isSlate)
  166. if not self.AllSchemeData then
  167. return
  168. end
  169. if not self.AllSchemeData[self.curActiveScheme] then
  170. return
  171. end
  172. if not self.AllSchemeData[self.curActiveScheme].scheme[equipPos] then
  173. return
  174. end
  175. if not isSlate then
  176. if not self.AllSchemeData[self.curActiveScheme].scheme[equipPos].gems or not self.AllSchemeData[self.curActiveScheme].scheme[equipPos].gems[gemPos] then
  177. return
  178. end
  179. return self.AllSchemeData[self.curActiveScheme].scheme[equipPos].gems[gemPos]
  180. else
  181. if not self.AllSchemeData[self.curActiveScheme].scheme[equipPos].stone then
  182. return
  183. end
  184. return self.AllSchemeData[self.curActiveScheme].scheme[equipPos].stone
  185. end
  186. end
  187. function this:GetOtherPlayerCurActiveSchemeGemByEquipPos(gemPos,equipPos,isSlate)
  188. if not self.OtherPlayerAllSchemeData then
  189. return
  190. end
  191. if not self.OtherPlayerAllSchemeData[self.OtherPlayerCurActiveScheme] then
  192. return
  193. end
  194. if not self.OtherPlayerAllSchemeData[self.OtherPlayerCurActiveScheme].scheme[equipPos] then
  195. return
  196. end
  197. if not isSlate then
  198. if not self.OtherPlayerAllSchemeData[self.OtherPlayerCurActiveScheme].scheme[equipPos].gems or not self.OtherPlayerAllSchemeData[self.OtherPlayerCurActiveScheme].scheme[equipPos].gems[gemPos] then
  199. return
  200. end
  201. return self.OtherPlayerAllSchemeData[self.OtherPlayerCurActiveScheme].scheme[equipPos].gems[gemPos]
  202. else
  203. if not self.OtherPlayerAllSchemeData[self.OtherPlayerCurActiveScheme].scheme[equipPos].stone then
  204. return
  205. end
  206. return self.OtherPlayerAllSchemeData[self.OtherPlayerCurActiveScheme].scheme[equipPos].stone
  207. end
  208. end
  209. function this:UpdateAllGemsSuitAttrInfo()
  210. self.Group2AllLevel={}
  211. self.AllGemSuitCfgTbl={}
  212. self.ActiveGemSuitCfgTbl={}
  213. if not self.AllSchemeData then
  214. return
  215. end
  216. for _, singleEquipPosData in pairs(self.AllSchemeData[self.curActiveScheme].scheme) do
  217. if singleEquipPosData.active and singleEquipPosData.gems then
  218. for k, gemId in pairs(singleEquipPosData.gems) do
  219. ---@type cfg_equip_gem_column
  220. local gemCfg=SL:GetConfig("cfg_equip_gem",gemId)
  221. if not self.Group2AllLevel[gemCfg.gemBelong[1]] then
  222. self.Group2AllLevel[gemCfg.gemBelong[1]]=0
  223. end
  224. if gemCfg then
  225. self.Group2AllLevel[gemCfg.gemBelong[1]]=self.Group2AllLevel[gemCfg.gemBelong[1]]+gemCfg.gemBelong[2]
  226. end
  227. end
  228. end
  229. end
  230. local cfgTbl= SL:GetConfigTable("cfg_equip_gemSuit")
  231. for k, v in pairs(cfgTbl) do
  232. v.sortId=v.id
  233. if self.Group2AllLevel[v.gemCondition[1]] and self.Group2AllLevel[v.gemCondition[1]]>=v.gemCondition[2] then
  234. v.sortId=v.sortId-100000
  235. end
  236. table.insert(self.AllGemSuitCfgTbl,v)
  237. end
  238. --组别写死1-4 策划说不扩了
  239. self.maxLevelActiveGroupSuitCfgLst={}
  240. for k, v in pairs(self.AllGemSuitCfgTbl) do
  241. if v.sortId<0 then
  242. if v.gemCondition[1]==1 then
  243. if not self.maxLevelActiveGroupSuitCfgLst[1] then
  244. self.maxLevelActiveGroupSuitCfgLst[1]=v
  245. end
  246. if self.maxLevelActiveGroupSuitCfgLst[1].gemCondition[2]<v.gemCondition[2] then
  247. self.maxLevelActiveGroupSuitCfgLst[1]=v
  248. end
  249. elseif v.gemCondition[1]==2 then
  250. if not self.maxLevelActiveGroupSuitCfgLst[2] then
  251. self.maxLevelActiveGroupSuitCfgLst[2]=v
  252. end
  253. if self.maxLevelActiveGroupSuitCfgLst[2].gemCondition[2]<v.gemCondition[2] then
  254. self.maxLevelActiveGroupSuitCfgLst[2]=v
  255. end
  256. elseif v.gemCondition[1]==3 then
  257. if not self.maxLevelActiveGroupSuitCfgLst[3] then
  258. self.maxLevelActiveGroupSuitCfgLst[3]=v
  259. end
  260. if self.maxLevelActiveGroupSuitCfgLst[3].gemCondition[2]<v.gemCondition[2] then
  261. self.maxLevelActiveGroupSuitCfgLst[3]=v
  262. end
  263. elseif v.gemCondition[1]==4 then
  264. if not self.maxLevelActiveGroupSuitCfgLst[4] then
  265. self.maxLevelActiveGroupSuitCfgLst[4]=v
  266. end
  267. if self.maxLevelActiveGroupSuitCfgLst[4].gemCondition[2]<v.gemCondition[2] then
  268. self.maxLevelActiveGroupSuitCfgLst[4]=v
  269. end
  270. end
  271. else
  272. table.insert(self.ActiveGemSuitCfgTbl,v)
  273. end
  274. end
  275. for k, v in pairs(self.maxLevelActiveGroupSuitCfgLst) do
  276. table.insert(self.ActiveGemSuitCfgTbl,v)
  277. end
  278. table.sort(self.ActiveGemSuitCfgTbl,function (a,b)
  279. return a.sortId<b.sortId
  280. end)
  281. table.sort(self.AllGemSuitCfgTbl,function (a,b)
  282. return a.sortId<b.sortId
  283. end)
  284. end
  285. -- {"cur":1,
  286. -- "data":
  287. -- {"1":
  288. -- {"scheme":
  289. -- {"2":
  290. -- {"gems":
  291. -- {"1":50031312},
  292. -- "active":true
  293. -- }
  294. -- },
  295. -- "pos":1,
  296. -- "active":true
  297. -- },
  298. -- "2":
  299. -- {"scheme":{},
  300. -- "pos":2,
  301. -- "active":false
  302. -- }
  303. -- }
  304. -- }
  305. function this:LUA_EVENT_LOGIN_MAP()
  306. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_SCHEME_INFO)
  307. end
  308. function this:GetTargetEquipGem(pos)
  309. if self.AllSchemeData and self.AllSchemeData[self.curActiveScheme] and self.AllSchemeData[self.curActiveScheme].scheme then
  310. return self.AllSchemeData[self.curActiveScheme].scheme[tostring(pos)]
  311. end
  312. end
  313. function this:GetOtherPlayerTargetEquipGem(pos)
  314. if self.OtherPlayerAllSchemeData[self.OtherPlayerCurActiveScheme] and self.OtherPlayerAllSchemeData[self.OtherPlayerCurActiveScheme].scheme then
  315. return self.OtherPlayerAllSchemeData[self.OtherPlayerCurActiveScheme].scheme[tostring(pos)]
  316. end
  317. return
  318. end