UserData.lua 84 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303
  1. local UserData = class("UserData", require("DataBase"))
  2. local ProtocalDataNormal = require("ProtocalDataNormal")
  3. local LuaToCSData = require("LuaToCSData")
  4. local SkillData = require("SkillData")
  5. local petStampRPItems
  6. local baseAttrs
  7. local lastEquipAttrs
  8. local lastCardAttrs
  9. local lastFashionAttrs
  10. local lastTeamEquipAttrs
  11. local lastTeamCardAttrs
  12. local lastPointAttrs
  13. local lastBaseAttrs
  14. local lastSkillAttrs
  15. local lastPetAttrs
  16. local lastHeadFrameAttrs
  17. local lastKeepSakeAttrs
  18. local lastTotalAttrs
  19. local attrsChanged = false
  20. local AttrFilterList
  21. function UserData:ctor()
  22. self.data = {}
  23. self.initedOver = false
  24. end
  25. function UserData:InitRoleBaseData(roleBase)
  26. local baseAttr = SInt.Convert(GlobalConfig.Instance:GetConfigIntValue(GlobalConfig.c_base_attr_id))
  27. baseAttrs = {[Enum.HeroAttrType.STR] = baseAttr, [Enum.HeroAttrType.AGI] = baseAttr, [Enum.HeroAttrType.INT] = baseAttr,
  28. [Enum.HeroAttrType.DEX] = baseAttr, [Enum.HeroAttrType.VIT] = baseAttr, [Enum.HeroAttrType.LUK] = baseAttr}
  29. local oldUid
  30. if self.data.roleBase == nil then
  31. self.data.roleBase = {}
  32. else
  33. oldUid = self.data.roleBase.uid
  34. end
  35. self.data.roleBase.uid = roleBase.id
  36. self.data.roleBase.nickname = roleBase.nick_name
  37. self.data.roleBase.desc = roleBase.desc
  38. --self.data.roleBase.headPortraitId = roleBase.head_id
  39. self.data.roleBase.coin = roleBase.coin
  40. self.data.roleBase.diamond = roleBase.rmb
  41. self.data.roleBase.sex = roleBase.sex
  42. self.data.roleBase.country = roleBase.country
  43. self.data.roleBase.guideId = roleBase.guide_id
  44. self.data.roleBase.vipLv = roleBase.vip_level
  45. self.data.roleBase.questionReward = roleBase.question_reward
  46. self.data.roleBase.RepressSkillPvpVal = roleBase.repress_skill_pvp_val
  47. LogError("===========uid======"..tostring(self.data.roleBase.uid))
  48. ManagerContainer.DataMgr.HeadFrameDataMgr:InitData(roleBase.head_Info)
  49. self:InitRoleRes(roleBase.res_list)
  50. self:InitAdditionalRoleData(roleBase.role_data)
  51. self:InitViewData(roleBase.fashion_data)
  52. if oldUid ~= self.data.roleBase.uid then
  53. ManagerContainer.DataMgr.ForceGuideData:InitForceGuideData(roleBase.cguide)
  54. end
  55. end
  56. function UserData:InitRoleRes(resList)
  57. local resMap = {}
  58. local res = nil
  59. for i = 1, #resList do
  60. res = resList[i]
  61. resMap[res.key] = res.value
  62. end
  63. self.data.roleBase.resMap = resMap
  64. for k,v in pairs(self.data.roleBase.resMap) do
  65. self:NewResRefreshRP(k)
  66. end
  67. end
  68. function UserData:NewResRefreshRP(cfgId)
  69. if not petStampRPItems then
  70. local val = GlobalConfig.Instance:GetConfigStrValue(321)
  71. if val ~= "" and val ~= nil then
  72. petStampRPItems = CommonUtil.DeserializeGlobalStrToTable(val)
  73. end
  74. end
  75. if CommonUtil.EleInTable(tostring(cfgId), petStampRPItems) then
  76. ManagerContainer.RedPointMgr.PetRPCtr:RefreshPetStampRPState()
  77. end
  78. end
  79. function UserData:GetUserId()
  80. if self.data.roleBase == nil then
  81. return 0
  82. end
  83. return self.data.roleBase.uid
  84. end
  85. function UserData:GetOriUserNickname()
  86. return self.data.roleBase.nickname
  87. end
  88. function UserData:GetQuestionRewardState()
  89. return self.data.roleBase.questionReward > 0
  90. end
  91. function UserData:GetUserNickname()
  92. local nickName = self.data.roleBase.nickname
  93. return CommonUtil.GetVaildNickName(nickName)
  94. end
  95. function UserData:GetGuideId()
  96. if self.data.roleBase == nil then
  97. return 0
  98. end
  99. return self.data.roleBase.guideId
  100. end
  101. function UserData:GetUserHeadIcon()
  102. local actor = ManagerContainer.LuaActorDataMgr:GetActorData(true,0)
  103. if actor ~= nil then
  104. return actor.HeadIcon
  105. end
  106. return nil
  107. end
  108. --- 获得性别 Enum.SexType
  109. ---@return integer
  110. function UserData:GetSex()
  111. return self.data.roleBase.sex
  112. end
  113. function UserData:GetUserRoleId()
  114. return self.data.roleBase and self.data.roleBase.roleCfgId or 0
  115. end
  116. function UserData:GetRoleDataAttrPoints()
  117. return self.data.roleBase.roleData.heroData.attrPoint
  118. end
  119. --- 获得玩家其他资源列表(不放背包的资源)
  120. --- itemCfg的id
  121. function UserData:GetResById(id)
  122. return self.data.roleBase.resMap[id] or 0
  123. end
  124. function UserData:GetHeroExp()
  125. return self.data.roleBase.roleData.heroExp
  126. end
  127. function UserData:GetJobCfgId()
  128. return self.data.roleBase.roleData.heroData.configId
  129. end
  130. function UserData:GetJobLv()
  131. return self.data.roleBase.roleData.jobLevel
  132. end
  133. function UserData:GetRoleExp()
  134. return self.data.roleBase.roleData.baseExp
  135. end
  136. function UserData:GetRoleLv()
  137. return self.data.roleBase.roleData.heroData.baseLevel
  138. end
  139. function UserData:GetCruise()
  140. return self.data.roleBase.roleData.cruise
  141. end
  142. function UserData:GetMaxCruise()
  143. return self.data.roleBase.roleData.max_cruise
  144. end
  145. function UserData:GetOwnCoin()
  146. return self.data.roleBase.coin
  147. end
  148. function UserData:GetOwnDiamond()
  149. return self.data.roleBase.diamond
  150. end
  151. function UserData:GetEvilExp()
  152. return self:GetResById(Enum.ItemType.EvilExp) or 0
  153. end
  154. function UserData:GetSkillResetCount()
  155. return self.data.roleBase.roleData.skillResetCount or -1
  156. end
  157. function UserData:GetHeadFrameId()
  158. return self.data.roleBase.roleData.headFrameId or -1;
  159. end
  160. --设置正在使用的头像框的id
  161. function UserData:SetHeadFrameId(_id)
  162. local _newId = _id or 0;
  163. self.data.roleBase.roleData.headFrameId = _newId;
  164. local actor = ManagerContainer.LuaActorDataMgr:GetActorData(true,0)
  165. if actor ~= nil then
  166. actor.HeadFrameId = self.data.roleBase.roleData.headFrameId
  167. end
  168. local frameData = ManagerContainer.DataMgr.HeadFrameDataMgr:GetHeadFrameById(_newId)
  169. if frameData ~= nil then
  170. frameData:SetFrameState(Enum.HeadFrameState.Using)
  171. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Used_New_HeadFrame,frameData.icon)
  172. end
  173. end
  174. --获取不同的货币,包括银币,钻石,将来还有可能有各种积分
  175. function UserData:GetMoneyBuType(_type)
  176. if _type == Enum.ItemType.Coin then --银币
  177. return self:GetOwnCoin() or 0, I18N.T("Silver"), ManagerContainer.CfgMgr:GetItemById(Enum.ItemType.Coin).Icon;
  178. elseif _type == Enum.ItemType.Diamond then --钻石
  179. return self:GetOwnDiamond() or 0, I18N.T("GoldCoin"), ManagerContainer.CfgMgr:GetItemById(Enum.ItemType.Diamond).Icon;
  180. elseif _type == Enum.ItemType.HeroSpirit then --英灵币
  181. return self:GetResById(Enum.ItemType.HeroSpirit) or 0, I18N.T("ValhallaCoin"), ManagerContainer.CfgMgr:GetItemById(Enum.ItemType.HeroSpirit).Icon;
  182. else
  183. error("暂时没有记录这种类型,请确认" .. tostring(_type));
  184. return 0;
  185. end
  186. end
  187. function UserData:GetJobExp()
  188. return self.data.roleBase.roleData.jobExp
  189. end
  190. function UserData:GetJobPoint()
  191. return self.data.roleBase.jobPoint
  192. end
  193. function UserData:GetJobType()
  194. return self.data.roleBase.roleData.jobType
  195. end
  196. function UserData:GetJobBranch()
  197. return self.data.roleBase.roleData.jobBranch
  198. end
  199. function UserData:GetJobStage()
  200. return self.data.roleBase.roleData.jobStage
  201. end
  202. function UserData:GetJobMaxLevel()
  203. return self.data.roleBase.roleData.maxJoBLevel
  204. end
  205. function UserData:GetJobIcon()
  206. return self.data.roleBase.roleData.jobIcon
  207. end
  208. function UserData:GetHeroDataAttr(id)
  209. return SDataUtil.InvConvert(self.data.roleBase.roleData.heroData.attrs[id] or 0)
  210. end
  211. function UserData:GetAllAttrs()
  212. return self.data.roleBase.roleData.heroData.attrs
  213. end
  214. function UserData:GetId()
  215. return self.data.roleBase.roleData.heroData.id
  216. end
  217. function UserData:GetVipExp()
  218. return self:GetResById(Enum.ItemType.VipExp)
  219. end
  220. function UserData:GetVipLv()
  221. return self.data.roleBase.vipLv
  222. end
  223. --- 角色显示用数据,包含创建角色和装备的时装数据
  224. function UserData:GetViewData()
  225. return self.data.roleBase.viewData
  226. end
  227. function UserData:InitAdditionalRoleData(roleData)
  228. if self.data.roleBase.roleData == nil then
  229. self.data.roleBase.roleData = {}
  230. end
  231. --self.data.roleBase.roleData.attrList = roleData.attr_list
  232. --for _,v in pairs(self.data.roleBase.roleData.attrList) do
  233. -- v.value = SInt.Convert(v.value)
  234. --end
  235. self.data.roleBase.roleData.baseExp = roleData.base_exp
  236. --self.data.roleBase.roleData.baseLevel = roleData.base_level
  237. --self.data.roleBase.roleData.attrPoint = SInt.Convert(roleData.attr_point)
  238. self.data.roleBase.roleData.jobLevel = roleData.job_level
  239. self.data.roleBase.roleData.jobExp = roleData.job_exp
  240. self.data.roleBase.roleData.jobPoint = roleData.job_point
  241. self.data.roleBase.roleData.heroExp = roleData.hero_exp
  242. self.data.roleBase.roleData.maxFightPower = SInt.Convert(roleData.fight_power)
  243. self.data.roleBase.roleData.lastLogoutTime = roleData.last_login_time
  244. --self.data.roleBase.roleData.skillData = roleData.skill_data
  245. --self.data.roleBase.roleData.slot = roleData.slot
  246. self.data.roleBase.roleData.cruise = roleData.cruise
  247. self.data.roleBase.roleData.max_cruise = roleData.max_cruise
  248. self.data.roleBase.roleData.skillResetCount = roleData.skill_reset_count
  249. self:InitHeadPortrait(roleData.head_id)
  250. self:InitHeroData(roleData.hero_data)
  251. self:SetHeadFrameId(roleData.head_frame_id)
  252. end
  253. function UserData:InitHeadPortrait(headId)
  254. self.data.roleBase.roleData.headPortraitId = headId
  255. local headPortraitCfgData = ManagerContainer.CfgMgr:GetHeadPortraitDataById(self.data.roleBase.roleData.headPortraitId)
  256. self.data.roleBase.roleData.headPortraitName = (headPortraitCfgData and headPortraitCfgData.HeadPortraitPic or '')
  257. end
  258. function UserData:InitHeroData(heroData)
  259. --LogHRWarning(Inspect(heroData))
  260. if self.data.roleBase.roleData.heroData == nil then
  261. self.data.roleBase.roleData.heroData = {}
  262. end
  263. local heroData1 = self.data.roleBase.roleData.heroData
  264. heroData1.id = heroData.id
  265. heroData1.configId = heroData.config_id
  266. heroData1.avatar = heroData.avatar
  267. heroData1.isBattle = heroData.is_battle
  268. heroData1.baseLevel = heroData.base_level
  269. heroData1.slot = heroData.slot
  270. if heroData1.attrs == nil then
  271. heroData1.attrs = CommonUtil.TableClone(baseAttrs)
  272. end
  273. self.data.roleBase.roleCfgId = CommonUtil.JobIdToRoleId(heroData1.configId, self.data.roleBase.sex)
  274. heroData1.isMainRole = true
  275. heroData1.isRole = true
  276. heroData1.strengthLevel = 100
  277. if heroData1.treasureFree == nil then
  278. heroData1.treasureFree = 1
  279. end
  280. heroData1.attrList = heroData.attr_list
  281. for _,v in pairs(heroData1.attrList) do
  282. v.value = SInt.Convert(v.value)
  283. end
  284. heroData1.attrPoint = SInt.Convert(heroData.attr_point)
  285. heroData1.qualityList ={}
  286. if heroData.quality_list and #heroData.quality_list > 0 then
  287. for k, v in pairs(heroData.quality_list) do
  288. heroData1.qualityList[v.key] = v.value
  289. end
  290. end
  291. heroData1.battlePetId = heroData.battle_pet_id
  292. --神器
  293. heroData1.skillEquipSlot = ProtocalDataNormal.ParseSkillEquipSlotData(heroData1.skillEquipSlot, heroData.skill_equip_slot)
  294. --宠物契约
  295. heroData1.petQiyueData = ProtocalDataNormal.ParsePetQiyueData(heroData1.petQiyueData, heroData.pet_qiyue_data)
  296. -- ManagerContainer.DataMgr.SkillsData:InitSkillsData(heroData.skill)
  297. self:InitSkillData(heroData.skill)
  298. self:InitJobData(heroData.config_id)
  299. self:UpdateHeroExtGoShowData(heroData1)
  300. end
  301. function UserData:InitSkillData(skill)
  302. local skillData = self.data.roleBase.roleData.heroData.skillData
  303. if not skillData then
  304. skillData = SkillData:new()
  305. self.data.roleBase.roleData.heroData.skillData = skillData
  306. end
  307. skillData:InitData(skill)
  308. end
  309. function UserData:InitJobData(jobId)
  310. local jobCfg = ManagerContainer.CfgMgr:GetJobDataById(jobId);
  311. if self.data.roleBase.roleData.jobType ~= jobCfg.JobType or self.data.roleBase.roleData.jobStage ~= jobCfg.JobStage then
  312. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.USER_HEADPROTRAIT_CHANGED)
  313. end
  314. self.data.roleBase.roleData.jobName = I18N.T(jobCfg.JobName)
  315. self.data.roleBase.roleData.jobType = jobCfg.JobType
  316. self.data.roleBase.roleData.jobBranch = jobCfg.JobBranch
  317. self.data.roleBase.roleData.jobStage = jobCfg.JobStage
  318. self.data.roleBase.roleData.jobIcon = jobCfg.JobIcon
  319. self.data.roleBase.roleData.maxJoBLevel = jobCfg.MaxJobLv
  320. end
  321. function UserData:RefreshAddPointAttr()
  322. if lastPointAttrs == nil then lastPointAttrs = {} end
  323. if lastBaseAttrs == nil then lastBaseAttrs = {} end
  324. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  325. for _,v in pairs(Enum.HeroAttrType) do
  326. if v <= Enum.HeroAttrType.LUK then
  327. local delta = self:GetPointAttr(v)
  328. if lastPointAttrs ~= nil and lastPointAttrs[v] ~= nil then
  329. -- delta = self:GetPointAttr(v) - lastPointAttrs[v]
  330. delta = SDataUtil.Sub(self:GetPointAttr(v), lastPointAttrs[v])
  331. end
  332. heroData:SetBaseFirstAttr(v, SDataUtil.Add(heroData:GetBaseFirstAttr(v),delta))
  333. lastPointAttrs[v] = self:GetPointAttr(v)
  334. lastBaseAttrs[v] = heroData:GetBaseFirstAttr(v)
  335. end
  336. end
  337. local heroLogicData = self:GetHeroData()
  338. for _,v in pairs(Enum.HeroAttrType) do
  339. heroLogicData.attrs[v] = heroData:GetFinalAttr(v)
  340. end
  341. end
  342. function UserData:GetLastBaseAttrs()
  343. return lastBaseAttrs
  344. end
  345. function UserData:InitViewData(viewData)
  346. self.data.roleBase.viewData = ProtocalDataNormal.FashionDataToViewData(viewData)
  347. end
  348. function UserData:UpdateHeroExtGoShowData(heroData)
  349. CommonUtil.UpdateHeroExtGoShowData(heroData)
  350. end
  351. --- 更新穿上的时装
  352. function UserData:UpdateFashionUpData(fashionUpData)
  353. self.data.roleBase.viewData.fashionData = ProtocalDataNormal.FashionUpDataToData(fashionUpData)
  354. self:InitHeroAttrFromBattle()
  355. self:SyncFashionToActorData()
  356. AvatarRTMgr.Instance:RemoveActor(1)
  357. end
  358. function UserData:GetPlayerActorParam()
  359. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  360. return heroData;
  361. end
  362. function UserData:SyncFashionToActorData()
  363. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  364. if self.data.roleBase.viewData == nil or heroData == nil then
  365. return
  366. end
  367. local fashionParam = LuaToCSData.CreateFashionParamData(self.data.roleBase.roleCfgId, self.data.roleBase.roleData.heroData.configId, self.data.roleBase.viewData)
  368. heroData:SetFashionData(fashionParam)
  369. end
  370. function UserData:GetHeroData(heroId)
  371. if not heroId or self:IsLeaderHero(heroId) then
  372. return self.data.roleBase.roleData.heroData
  373. else
  374. return ManagerContainer.DataMgr.PartnerData:GetPartnerDataByUniqueId(heroId)
  375. end
  376. end
  377. function UserData:GetMainRoleData()
  378. return self.data.roleBase.roleData.heroData
  379. end
  380. function UserData:GetAllSlotInfos()
  381. local allSlots = {}
  382. local heroSlot = self.data.roleBase.roleData.heroData.slot
  383. allSlots[heroSlot.hero_id] = heroSlot
  384. local slots = ManagerContainer.DataMgr.PartnerData:GetAllPartnerSlots()
  385. for k,v in pairs(slots) do
  386. allSlots[k] = v
  387. end
  388. return allSlots
  389. end
  390. function UserData:GetSlotInfoById(id)
  391. if id == 1 then
  392. local heroSlot = self.data.roleBase.roleData.heroData.slot
  393. return heroSlot
  394. else
  395. local partnerData = ManagerContainer.DataMgr.PartnerData:GetPartnerDataByUniqueId(id)
  396. if not partnerData then
  397. return nil
  398. end
  399. return partnerData.slot
  400. end
  401. end
  402. function UserData:GetCurSlotInfos(id)
  403. --self:GetAllSlotInfos()
  404. local slot = self:GetSlotInfoById(id)
  405. if slot == nil then
  406. return nil
  407. end
  408. return slot.slot_list
  409. end
  410. function UserData:GetSlotIndexByHeroId(id)
  411. return id
  412. end
  413. function UserData:GetSlotInfosByHeroId(id)
  414. local slot = self:GetSlotInfoById(id)
  415. if slot then
  416. return slot.slot_list
  417. end
  418. return nil
  419. end
  420. function UserData:GetSlotBySlotIndex(slotIndex)
  421. return self:GetSlotInfoById(slotIndex)
  422. end
  423. function UserData:GetPointAttr(type)
  424. for _,v in pairs(self.data.roleBase.roleData.heroData.attrList) do
  425. if v.key == type then
  426. return v.value
  427. end
  428. end
  429. return 0
  430. end
  431. function UserData:CalcEquipAttrs()
  432. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  433. local slots = self:GetCurSlotInfos(1)
  434. local heroLogicData = self:GetHeroData()
  435. local equipTotalAttrs = self:GetSlotsEquipAttr(slots)
  436. for _,v in pairs(Enum.HeroAttrType) do
  437. if v <= Enum.HeroAttrType.RealHurt then
  438. local eAttr = heroData:GetAdditionalAttr(v)
  439. local lastAttr = (lastEquipAttrs == nil and 0 or lastEquipAttrs[v])
  440. heroData:SetAdditionalAttr(v, SDataUtil.Sub(SDataUtil.Add(eAttr,equipTotalAttrs[v]),lastAttr))
  441. elseif v >= Enum.HeroAttrType.STR_Percent then
  442. local eAttrPercent = heroData:GetAdditionalAttrPercent(v)
  443. local lastAttr = (lastEquipAttrs == nil and 0 or lastEquipAttrs[v])
  444. heroData:SetAdditionalAttrPercent(v, SDataUtil.Sub(SDataUtil.Add(eAttrPercent,equipTotalAttrs[v]),lastAttr))
  445. end
  446. end
  447. for _,v in pairs(Enum.HeroAttrType) do
  448. heroLogicData.attrs[v] = heroData:GetFinalAttr(v)
  449. end
  450. --if lastTeamEquipAttrs ~= nil then
  451. -- for k,v in pairs(lastTeamEquipAttrs) do
  452. -- if v ~= equipTotalAttrs[k] then
  453. -- attrsChanged = true
  454. -- break
  455. -- end
  456. -- end
  457. --end
  458. lastEquipAttrs = equipTotalAttrs
  459. end
  460. function UserData:CalcCardAttrs()
  461. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  462. local slots = self:GetCurSlotInfos(1)
  463. local heroLogicData = self:GetHeroData()
  464. --ManagerContainer.DataMgr.CardData:RefreshEquipedCardSuitData(1)
  465. local cardTotalAttrs = self:GetSlotsCardAttr(slots)
  466. local state = ManagerContainer.DataMgr.CardData:GetCardSuitStateById(1)
  467. if state then
  468. local lv = ManagerContainer.DataMgr.CardData:GetCardSuitLvById(1)
  469. if lv > 0 then
  470. local suitCfgData = ManagerContainer.CfgMgr:GetCardSuitNewCfgById(lv)
  471. if suitCfgData then
  472. for i = 1, #suitCfgData.Suit1 do
  473. local attr = suitCfgData.Suit1[i]
  474. if attr then
  475. local attrId = attr[1]
  476. local attrNum = attr[2]*0.0001
  477. local mapAttrData = ManagerContainer.CfgMgr:GetFightCfgByAttrId(attrId)
  478. local newAttrId = mapAttrData.Mapping > 0 and mapAttrData.Mapping or attrId
  479. if not cardTotalAttrs[newAttrId] then
  480. cardTotalAttrs[newAttrId] = 0
  481. end
  482. if mapAttrData.Mapping > 0 then
  483. cardTotalAttrs[newAttrId] = cardTotalAttrs[newAttrId] *(1 + attrNum)
  484. else
  485. cardTotalAttrs[newAttrId] = cardTotalAttrs[newAttrId] + attrNum
  486. end
  487. end
  488. end
  489. end
  490. end
  491. end
  492. for _,v in pairs(Enum.HeroAttrType) do
  493. if cardTotalAttrs[v] ~= nil then
  494. if v < Enum.HeroAttrType.STR_Percent then
  495. local eAttr = heroData:GetAdditionalAttr(v)
  496. local cardAttr = (cardTotalAttrs[v] - (lastCardAttrs == nil and 0 or lastCardAttrs[v]))
  497. local val = SDataUtil.Add(eAttr,cardAttr);
  498. heroData:SetAdditionalAttr(v, val)
  499. else
  500. local eAttrPercent = heroData:GetAdditionalAttrPercent(v)
  501. local cardAttr = cardTotalAttrs[v] - (lastCardAttrs == nil and 0 or lastCardAttrs[v])
  502. local val = SDataUtil.Add(eAttrPercent,cardAttr);
  503. heroData:SetAdditionalAttrPercent(v, val)
  504. end
  505. end
  506. end
  507. for _,v in pairs(Enum.HeroAttrType) do
  508. heroLogicData.attrs[v] = heroData:GetFinalAttr(v)
  509. end
  510. --
  511. --if lastTeamCardAttrs ~= nil then
  512. -- if not attrsChanged then
  513. -- for k,v in pairs(lastTeamCardAttrs) do
  514. -- if v ~= cardTotalAttrs[k] then
  515. -- attrsChanged = true
  516. -- break
  517. -- end
  518. -- end
  519. -- end
  520. --end
  521. lastCardAttrs = cardTotalAttrs
  522. end
  523. function UserData:CalcFashionAttrs()
  524. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  525. local heroLogicData = self:GetHeroData()
  526. --local fashionMap = ManagerContainer.DataMgr.FashionData:GetFashionMap()
  527. --local fashionTotalAttrs = CommonUtil.GetFashionAttrMap(fashionMap)
  528. local fashionTotalAttrs = ManagerContainer.DataMgr.FashionData:GetFashionAllAttrsByJobType(0)
  529. local fashionSuitAttrs = ManagerContainer.DataMgr.FashionData:GetFashionSuitAttrs()
  530. local totalAttrs = {}
  531. if fashionTotalAttrs then
  532. for k,v in pairs(fashionTotalAttrs) do
  533. if not totalAttrs[k] then
  534. totalAttrs[k] = 0
  535. end
  536. totalAttrs[k] = totalAttrs[k] + v
  537. end
  538. end
  539. if fashionSuitAttrs then
  540. for k,v in pairs(fashionSuitAttrs) do
  541. if not totalAttrs[k] then
  542. totalAttrs[k] = 0
  543. end
  544. totalAttrs[k] = totalAttrs[k] + v
  545. end
  546. end
  547. local changeNum = 0
  548. for _,v in pairs(Enum.HeroAttrType) do
  549. if totalAttrs[v] ~= nil then
  550. if v < Enum.HeroAttrType.STR_Percent then
  551. changeNum = (totalAttrs[v] - ((lastFashionAttrs == nil or not lastFashionAttrs[v]) and 0 or lastFashionAttrs[v]))
  552. if changeNum ~= 0 then
  553. -- local val = heroData:GetAdditionalAttr(v) + changeNum;
  554. local val = SDataUtil.Add(heroData:GetAdditionalAttr(v), changeNum)
  555. heroData:SetAdditionalAttr(v, val)
  556. attrsChanged = true
  557. end
  558. else
  559. changeNum = (totalAttrs[v] - ((lastFashionAttrs == nil or not lastFashionAttrs[v]) and 0 or lastFashionAttrs[v]))
  560. if changeNum ~= 0 then
  561. -- local val = heroData:GetAdditionalAttrPercent(v) + changeNum * 0.0001
  562. local val = SDataUtil.Add(heroData:GetAdditionalAttrPercent(v), changeNum * 0.0001)
  563. heroData:SetAdditionalAttrPercent(v, val)
  564. attrsChanged = true
  565. end
  566. end
  567. end
  568. end
  569. for _,v in pairs(Enum.HeroAttrType) do
  570. heroLogicData.attrs[v] = heroData:GetFinalAttr(v)
  571. end
  572. lastFashionAttrs = totalAttrs
  573. end
  574. function UserData:CalcSkillAttrs()
  575. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  576. local heroLogicData = self:GetHeroData()
  577. local skillData = self:GetSkillData(self:GetId())
  578. local skillTotalAttrs = skillData and skillData:GetUnlockSkillAttrs() or {}
  579. local attrValue = nil
  580. local changeNum = nil
  581. local isChanged = false
  582. for _,v in pairs(Enum.HeroAttrType) do
  583. attrValue = skillTotalAttrs[v]
  584. if not attrValue then attrValue = 0 end
  585. changeNum = attrValue - ((lastSkillAttrs == nil or not lastSkillAttrs[v]) and 0 or lastSkillAttrs[v])
  586. if changeNum ~= 0 then
  587. if v < Enum.HeroAttrType.STR_Percent then
  588. -- local val = heroData:GetAdditionalAttr(v) + changeNum
  589. local val = SDataUtil.Add(heroData:GetAdditionalAttr(v), changeNum)
  590. heroData:SetAdditionalAttr(v, val)
  591. else
  592. -- local val = heroData:GetAdditionalAttrPercent(v) + changeNum * 0.0001
  593. local val = SDataUtil.Add(heroData:GetAdditionalAttrPercent(v), changeNum * 0.0001)
  594. heroData:SetAdditionalAttrPercent(v, val)
  595. end
  596. isChanged = true
  597. end
  598. end
  599. for _,v in pairs(Enum.HeroAttrType) do
  600. heroLogicData.attrs[v] = heroData:GetFinalAttr(v)
  601. end
  602. lastSkillAttrs = skillTotalAttrs
  603. if isChanged then
  604. attrsChanged = true
  605. end
  606. return isChanged
  607. end
  608. function UserData:CalcPetAttrs()
  609. if not AttrFilterList then
  610. local val = GlobalConfig.Instance:GetConfigStrValue(230)
  611. if val ~= "" and val ~= nil then
  612. AttrFilterList = CommonUtil.DeserializeGlobalStrToTable(val)
  613. end
  614. end
  615. if not lastPetAttrs then
  616. lastPetAttrs = {}
  617. end
  618. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  619. local heroLogicData = self:GetHeroData()
  620. local petId = heroLogicData.battlePetId
  621. local petData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(petId)
  622. local multiply = 0
  623. if petData then
  624. local petCfgData = ManagerContainer.CfgMgr:GetPetDataById(petData.cfgId)
  625. multiply = petCfgData.ConversionRate*0.0001
  626. end
  627. local petActorData = ManagerContainer.DataMgr.PetDataMgr:GetPetActorData(petId)
  628. for _,v in pairs(Enum.HeroAttrType) do
  629. if not CommonUtil.EleInTable(tostring(v), AttrFilterList) then
  630. local petAttr = petActorData and SDataUtil.Multiply(petActorData:GetFinalAttr(v), multiply) or 0
  631. if v <= Enum.HeroAttrType.RealHurt then
  632. local eAttr = heroData:GetAdditionalAttr(v)
  633. local lastAttr = lastPetAttrs[v] or 0
  634. heroData:SetAdditionalAttr(v, SDataUtil.Sub(SDataUtil.Add(eAttr,petAttr),lastAttr))
  635. elseif v >= Enum.HeroAttrType.STR_Percent then
  636. local eAttrPercent = heroData:GetAdditionalAttrPercent(v)
  637. local lastAttr = lastPetAttrs[v] or 0
  638. heroData:SetAdditionalAttrPercent(v, SDataUtil.Sub(SDataUtil.Add(eAttrPercent,petAttr),lastAttr))
  639. end
  640. lastPetAttrs[v] = petAttr
  641. end
  642. end
  643. for _,v in pairs(Enum.HeroAttrType) do
  644. heroLogicData.attrs[v] = heroData:GetFinalAttr(v)
  645. end
  646. end
  647. function UserData:CalcHeadFrameAttrs()
  648. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  649. local heroLogicData = self:GetHeroData()
  650. local headFrameAttrs = ManagerContainer.DataMgr.HeadFrameDataMgr:CalcAttrs()
  651. for _,v in pairs(Enum.HeroAttrType) do
  652. if v <= Enum.HeroAttrType.RealHurt then
  653. local eAttr = heroData:GetAdditionalAttr(v)
  654. local lastAttr = (lastHeadFrameAttrs == nil and 0 or lastHeadFrameAttrs[v])
  655. heroData:SetAdditionalAttr(v, SDataUtil.Sub(SDataUtil.Add(eAttr,headFrameAttrs[v]),lastAttr))
  656. elseif v >= Enum.HeroAttrType.STR_Percent then
  657. local eAttrPercent = heroData:GetAdditionalAttrPercent(v)
  658. local lastAttr = (lastHeadFrameAttrs == nil and 0 or lastHeadFrameAttrs[v])
  659. heroData:SetAdditionalAttrPercent(v, SDataUtil.Sub(SDataUtil.Add(eAttrPercent,headFrameAttrs[v]),lastAttr))
  660. end
  661. end
  662. for _,v in pairs(Enum.HeroAttrType) do
  663. heroLogicData.attrs[v] = heroData:GetFinalAttr(v)
  664. end
  665. lastHeadFrameAttrs = headFrameAttrs
  666. end
  667. function UserData:CalcKeepSakeAttrs()
  668. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  669. local keepsakeMaps = ManagerContainer.DataMgr.KeepSakeBookData:GetKeepSakeMaps()
  670. local heroLogicData = self:GetHeroData()
  671. local addAttrs = {}
  672. for k,v in pairs(keepsakeMaps) do
  673. local cfgData = ManagerContainer.CfgMgr:GetKeepSakeCfgDataById(k)
  674. if cfgData and CommonUtil.EleInTable(0, cfgData.Job) then
  675. local attrs = cfgData["AddAttrLevel"..v]
  676. if attrs then
  677. for i = 1,#attrs do
  678. local attrId = attrs[i][1]
  679. local val1 = attrs[i][2]
  680. if not addAttrs[attrId] then
  681. addAttrs[attrId] = 0
  682. end
  683. addAttrs[attrId] = addAttrs[attrId] + (attrId > 21 and val1*0.0001 or val1)
  684. end
  685. end
  686. end
  687. end
  688. for k,v in pairs(addAttrs) do
  689. if k <= Enum.HeroAttrType.RealHurt then
  690. local eAttr = heroData:GetAdditionalAttr(k)
  691. local lastAttr = (lastKeepSakeAttrs == nil and 0 or (lastKeepSakeAttrs[k] or 0))
  692. heroData:SetAdditionalAttr(k, SDataUtil.Sub(SDataUtil.Add(eAttr,v),lastAttr))
  693. elseif k >= Enum.HeroAttrType.STR_Percent then
  694. local eAttrPercent = heroData:GetAdditionalAttrPercent(k)
  695. local lastAttr = (lastKeepSakeAttrs == nil and 0 or (lastKeepSakeAttrs[k] or 0))
  696. heroData:SetAdditionalAttrPercent(k, SDataUtil.Sub(SDataUtil.Add(eAttrPercent,v),lastAttr))
  697. end
  698. end
  699. for k,v in pairs(Enum.HeroAttrType) do
  700. heroLogicData.attrs[v] = heroData:GetFinalAttr(v)
  701. end
  702. lastKeepSakeAttrs = addAttrs
  703. end
  704. function UserData:AddKeepSakeLvUpAttrs(keepsakeId, lv)
  705. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  706. if not lv then return end
  707. local heroLogicData = self:GetHeroData()
  708. local addAttrs = {}
  709. local cfgData = ManagerContainer.CfgMgr:GetKeepSakeCfgDataById(keepsakeId)
  710. if cfgData and CommonUtil.EleInTable(0, cfgData.Job) then
  711. local attrs = cfgData["AddAttrLevel"..lv]
  712. if attrs then
  713. for i = 1,#attrs do
  714. local attrId = attrs[i][1]
  715. local val1 = attrs[i][2]
  716. if not addAttrs[attrId] then
  717. addAttrs[attrId] = 0
  718. end
  719. addAttrs[attrId] = addAttrs[attrId] + (attrId > 21 and val1*0.0001 or val1)
  720. end
  721. end
  722. if lv > 1 then
  723. attrs = cfgData["AddAttrLevel"..(lv - 1)]
  724. if attrs then
  725. for i = 1,#attrs do
  726. local attrId = attrs[i][1]
  727. local val1 = attrs[i][2]
  728. if not addAttrs[attrId] then
  729. addAttrs[attrId] = 0
  730. end
  731. addAttrs[attrId] = addAttrs[attrId] - (attrId > 21 and val1*0.0001 or val1)
  732. end
  733. end
  734. end
  735. end
  736. for k,v in pairs(addAttrs) do
  737. if k <= Enum.HeroAttrType.RealHurt then
  738. local eAttr = heroData:GetAdditionalAttr(k)
  739. lastKeepSakeAttrs[k] = (lastKeepSakeAttrs[k] or 0) + v
  740. heroData:SetAdditionalAttr(k, SDataUtil.Add(eAttr,v))
  741. elseif k >= Enum.HeroAttrType.STR_Percent then
  742. local eAttrPercent = heroData:GetAdditionalAttrPercent(k)
  743. lastKeepSakeAttrs[k] = (lastKeepSakeAttrs[k] or 0) + v
  744. heroData:SetAdditionalAttrPercent(k, SDataUtil.Add(eAttrPercent,v))
  745. end
  746. end
  747. for k,v in pairs(addAttrs) do
  748. heroLogicData.attrs[k] = heroData:GetFinalAttr(k)
  749. end
  750. end
  751. function UserData:InitHeroAttrFromBattle()
  752. attrsChanged = false
  753. lastTotalAttrs = CommonUtil.TableClone(self.data.roleBase.roleData.heroData.attrs)
  754. self:CalcEquipAttrs()
  755. self:CalcCardAttrs()
  756. self:CalcFashionAttrs()
  757. self:CalcSkillAttrs()
  758. self:CalcPetAttrs()
  759. self:CalcHeadFrameAttrs()
  760. self:CalcKeepSakeAttrs()
  761. -- LogError(Inspect(self:GetHeroData()))
  762. end
  763. function UserData:GetNewActorAttrs()
  764. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  765. local heroLogicData = self:GetHeroData()
  766. for _,v in pairs(Enum.HeroAttrType) do
  767. heroLogicData.attrs[v] = heroData:GetFinalAttr(v)
  768. end
  769. end
  770. function UserData:SaveLastTotalAttr()
  771. lastTotalAttrs = CommonUtil.TableClone(self.data.roleBase.roleData.heroData.attrs)
  772. end
  773. function UserData:GetLastTotalAtttrs()
  774. return lastTotalAttrs
  775. end
  776. function UserData:RefreshSlotData(data)
  777. --self:GetAllSlotInfos()
  778. local function IsSlotEquipChanged(oldSlotList, newSlotList)
  779. if oldSlotList and newSlotList then
  780. for i = 1, 6 do
  781. local oldCards = oldSlotList[i]
  782. local newCards = newSlotList[i]
  783. if not oldCards then
  784. oldCards = {}
  785. oldCards.card_id_list = {}
  786. end
  787. if oldCards and newCards then
  788. if oldCards.equip_id ~= newCards.equip_id then
  789. return true
  790. end
  791. for j = 1, 4 do
  792. if oldCards.card_id_list[j] ~= newCards.card_id_list[j] then
  793. return true
  794. end
  795. end
  796. end
  797. end
  798. end
  799. return false
  800. end
  801. local isIn = false
  802. local heroData = CommonUtil.GetHeroLogicDataByUid(data.hero_id)
  803. if heroData.slot then
  804. isIn = true
  805. local changed = IsSlotEquipChanged(heroData.slot.slot_list, data.slot_list)
  806. heroData.slot = data
  807. if changed then
  808. ManagerContainer.RedPointMgr.HeroRPCtr:RefreshRoleCardRP()
  809. end
  810. return
  811. end
  812. if not isIn then
  813. heroData.slot = data
  814. end
  815. end
  816. function UserData:IsHeroSlot(hero_id)
  817. return hero_id == 1
  818. end
  819. function UserData:RefreshHeroesTreasureState(heroIds, isFree)
  820. for _,v in pairs(heroIds) do
  821. if v == 1 then
  822. local heroData = self:GetHeroData()
  823. heroData.treasureFree = isFree and 1 or 0
  824. else
  825. ManagerContainer.DataMgr.PartnerData:RefreshPartnerTreasureState(v, isFree)
  826. end
  827. end
  828. end
  829. function UserData:RefreshHeroCurMaxExp()
  830. local curRoleLv = self:GetRoleLv()
  831. local baseExpData = ManagerContainer.CfgMgr:GetRoleExpData(curRoleLv)
  832. self.data.roleBase.roleData.baseCurMaxExp = baseExpData.Name
  833. local curJobLv = self:GetJobLv()
  834. local curMaxJobExp = ManagerContainer.CfgMgr:GetCurMaxJobExpByLvAndStep(curJobLv, self:GetJobStage())
  835. self.data.roleBase.roleData.jobCurMaxExp = curMaxJobExp
  836. end
  837. function UserData:GetHeroCurBaseMaxExp()
  838. return self.data.roleBase.roleData.baseCurMaxExp
  839. end
  840. function UserData:GetHeroCurJobMaxExp()
  841. return self.data.roleBase.roleData.jobCurMaxExp
  842. end
  843. function UserData:InitRoleFightPower(data, _getHeroData)
  844. self.data.roleBase.roleData.totalFightPower = SInt.Convert(data.total_fightpower or 0)
  845. for _,v in pairs(data.slot_fightpower) do
  846. if v ~= nil then
  847. local heroData;
  848. if _getHeroData then --查看别的玩家的时候不能用自己本身的数据,这里是传过来的查找函数,不用这个就传nil
  849. heroData = _getHeroData(v.hero_id);
  850. else
  851. heroData = CommonUtil.GetHeroLogicDataByUid(v.hero_id)
  852. end
  853. heroData.fightPower = SInt.Convert(v.hero_fight_power or 0)
  854. heroData.petFightPower = SInt.Convert(v.pet_fight_power or 0)
  855. self:AddAsideFighterSvrPower(v.hero_id,false,v.hero_fight_power)
  856. self:AddAsideFighterSvrPower(heroData.battlePetId,true,v.pet_fight_power)
  857. --LogError("InitRoleFightPower"..tostring(heroData.fightPower).." v.hero_id "..tostring(v.hero_id) )
  858. end
  859. end
  860. self.petRelationFightPower = data.pet_bond_fightpower or 0
  861. end
  862. function UserData:GetPetRelationTotalFightPower()
  863. return self.petRelationFightPower
  864. end
  865. function UserData:GetTotalFightPower()
  866. return SInt.InvConvert(self.data.roleBase.roleData.totalFightPower or 0)
  867. end
  868. function UserData:GetMaxTotalFightPower()
  869. return SDataUtil.InvConvert(self.data.roleBase.roleData.maxFightPower or 0)
  870. end
  871. function UserData:GetSlotFightPower(id)
  872. local heroData = CommonUtil.GetHeroLogicDataByUid(id)
  873. if heroData == nil then return 0 end
  874. local totalPower = SDataUtil.InvConvert(heroData.fightPower or 0)
  875. + SDataUtil.InvConvert(heroData.petFightPower or 0)
  876. return totalPower
  877. end
  878. function UserData:SyncActorBaseLevel()
  879. local heroData = ManagerContainer.LuaActorDataMgr:GetHeroActorData(self:GetUserRoleId())
  880. heroData:SetLevel(self.data.roleBase.roleData.heroData.baseLevel)
  881. end
  882. function UserData:GetCreateTime()
  883. return self.createRoleTime
  884. end
  885. function UserData:RegisterNetEvents()
  886. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_BASE_LEVEL_UP_NTF, function(data)
  887. -- 目前所有的角色信息变化都能在,SC_ROLE_BASE_INFO_NTF中获得,所以这里暂不处理
  888. -- self.data.roleBase.roleData.baseLevel = data.new_level
  889. -- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_ROLE_LV)
  890. end)
  891. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ADD_QUALITY_POINT_ACK,function (data)
  892. if data.error == 0 then
  893. local userName
  894. local herodata = ManagerContainer.DataMgr.UserData:GetHeroData(data.hero_id)
  895. if data.hero_id == 1 then
  896. userName = ManagerContainer.DataMgr.UserData:GetUserNickname()
  897. else
  898. local _partnerData = ManagerContainer.CfgMgr:GetPartnerDataById(herodata.configId)
  899. userName = string.formatbykey(_partnerData.Name)
  900. end
  901. local itemdata = ManagerContainer.CfgMgr:GetItemById(data.item_id)
  902. if itemdata then
  903. ManagerContainer.LuaUIMgr:ErrorNoticeDisplayWithParam('UseFruit',userName,itemdata['Name'])
  904. end
  905. --ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_ATTR_ADD_SUCCESS)
  906. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.FRUIT_USE_SUCC,{data.hero_id,herodata})
  907. end
  908. end)
  909. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_STARTUP_INFO_NTF, function(data)
  910. --LogError("start"..Inspect(data))
  911. --由于该协议会发送多次,所以需要判断数据是否为空===========================================很重要
  912. Constant.OpenPay = (data.func_disable == nil or not data.func_disable)
  913. self.createRoleTime = data.create_time
  914. self.serverStartTime = data.service_start_time
  915. ManagerContainer.LuaTimerMgr:SyncServerTime(data.server_time)
  916. if data.role_base then
  917. self:InitRoleBaseData(data.role_base)
  918. end
  919. if data.role_hero then
  920. ManagerContainer.LuaActorAttributeMgr:SetAllData(data.role_hero.battle_attr_list)--新号 属性
  921. ManagerContainer.DataMgr.PartnerData:InitPartnerData(data.role_hero)
  922. self:GetAllSlotInfos()
  923. end
  924. if data.role_base then
  925. --同步在线奖励时间
  926. ManagerContainer.LuaBattleMgr:SyncOnlineTime(data.role_base)
  927. self:RefreshHeroCurMaxExp()
  928. ManagerContainer.PayMgr:InitRechargeData(data.role_base)
  929. ManagerContainer.DataMgr.BTRechargeRewardDataMgr:InitBtTotalRecharge(data.role_base)
  930. end
  931. if data.role_bag then
  932. ManagerContainer.DataMgr.BagData:InitBagData(data.role_bag)
  933. end
  934. if data.role_wish_box then
  935. ManagerContainer.DataMgr.BagData:RefreshWishSlotData(data.role_wish_box)
  936. end
  937. if data.role_battle then
  938. ManagerContainer.LuaBattleMgr:SetBattleData(data.role_battle,true)
  939. if data.role_battle.evil_info then
  940. ManagerContainer.DataMgr.EvilData:SetEvilData(data.role_battle.evil_info)
  941. end
  942. if data.role_battle.expedition_info then
  943. ManagerContainer.DataMgr.ExpeditionDataMgr:SetData(data.role_battle.expedition_info)
  944. end
  945. ManagerContainer.DataMgr.BattleAccTimeManager:InitData(data.role_battle)
  946. end
  947. if data.role_fashion then
  948. ManagerContainer.DataMgr.FashionData:InitFashionData(data.role_fashion)
  949. end
  950. if data.role_task then
  951. ManagerContainer.DataMgr.TaskDataNew:InitRoleTask(data.role_task)
  952. end
  953. if data.role_competition then
  954. ManagerContainer.DataMgr.CompetitionData:InitCurCompetitionData(data.role_competition)
  955. ManagerContainer.DataMgr.ChatData:Init()
  956. end
  957. if data.role_tower then
  958. ManagerContainer.DataMgr.TowerDataMgr:InitClimbingTowerInfo(data.role_tower)
  959. end
  960. if data.role_bt then
  961. ManagerContainer.DataMgr.BoliShopData:RefreshBoliData(data.role_bt.boli_data)
  962. ManagerContainer.DataMgr.BTRechargeRewardDataMgr:InitData(data.role_bt.base_data)
  963. end
  964. if data.role_skill_equip then
  965. ManagerContainer.DataMgr.SkillEquipData:InitData(data.role_skill_equip)
  966. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_HEAD_DATA_REQ)
  967. end
  968. if data.role_map then
  969. ManagerContainer.DataMgr.WorldBossData:ChangeWorldBossCount(data.role_map.world_boss_count)
  970. end
  971. if data.role_draw then
  972. ManagerContainer.DataMgr.SummonDataMgr:InitSummonMap(data.role_draw)
  973. -- 砸蛋
  974. ManagerContainer.DataMgr.LuckyEggDataMgr:InitLuckyEggMap(data.role_draw)
  975. end
  976. if data.role_daochang100 then
  977. ManagerContainer.DataMgr.HundredDojoDataMgr:InitData(data.role_daochang100)
  978. ManagerContainer.DataMgr.TrunWheelDataMgr:OnDataChangeNtf(data.role_daochang100)
  979. end
  980. if data.role_cross then
  981. ManagerContainer.DataMgr.VoyageDataMgr:RefreshSelfVoyageData(data.role_cross.yuanhangtrial)
  982. end
  983. if data.role_fightpower then
  984. self:InitRoleFightPower(data.role_fightpower)
  985. end
  986. if data.role_red then
  987. self:InitRedState(data.role_red)
  988. end
  989. end)
  990. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_DAO_CHANG100_WHEEL_CHANG_NTF, function(data)
  991. ManagerContainer.DataMgr.TrunWheelDataMgr:OnDataChangeNtf(data)
  992. end)
  993. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CONVER_SKILL_EXP_ACK, function(data)
  994. if data.error == 0 then
  995. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("GetAdvanceSkillExpSucc")
  996. end
  997. end)
  998. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ROLE_BASE_INFO_NTF, function(data)
  999. --LogError("==============SC_ROLE_BASE_INFO_NTF=================="..Inspect(data))
  1000. local lastData = clone(self.data)
  1001. self.data.roleBase.coin = data.coin
  1002. self.data.roleBase.diamond = data.rmb
  1003. self.data.roleBase.RepressSkillPvpVal = data.repress_skill_pvp_val
  1004. self:InitRoleRes(data.res_list)
  1005. self:InitAdditionalRoleData(data.role_data)
  1006. --self:InitHeroAttrFromBattle()
  1007. self:RefreshHeroCurMaxExp()
  1008. ManagerContainer.RedPointMgr.HeroRPCtr:RoleRedPointNotify()
  1009. self:CompareDataChange(lastData)
  1010. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_UI_REDPOINT_CHANGE)
  1011. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_COIN_AND_DIAMOND)
  1012. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_COIN_AND_JOBEXP)
  1013. if lastData.roleBase.roleData.cruise ~= self.data.roleBase.roleData.cruise then
  1014. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_TREASURE_CRUISE)
  1015. end
  1016. if lastData.roleBase.roleData.heroData.baseLevel ~= self.data.roleBase.roleData.heroData.baseLevel then
  1017. self:SyncActorBaseLevel()
  1018. self:GetNewActorAttrs()
  1019. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_HERO_LVUP_ATTR)
  1020. self:SDKUpdateRoleLv()
  1021. end
  1022. if lastData.roleBase.roleData.heroData.battlePetId ~= self.data.roleBase.roleData.heroData.battlePetId then
  1023. self:CalcPetAttrs()
  1024. end
  1025. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_HERO_UI)
  1026. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.MAIN_UI_ROLE_REDPOINT_NOTICE)
  1027. end)
  1028. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ADD_ATTR_POINT_ACK, function(data)
  1029. if data.error == Enum.NetErrorCode.ERROR_OK then
  1030. if data.hero_id == 1 then
  1031. self:RefreshAddPointAttr()
  1032. ManagerContainer.RedPointMgr.HeroRPCtr:HeroAttrRPNotify()
  1033. else
  1034. ManagerContainer.DataMgr.PartnerData:RefreshAddPointAttr(data.hero_id)
  1035. ManagerContainer.RedPointMgr.HeroRPCtr:PartnerAttrRPNotify(data.hero_id)
  1036. end
  1037. --ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_ATTR_ADD_SUCCESS)
  1038. end
  1039. end)
  1040. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SLOT_DATA_NTF, function(data)
  1041. self:RefreshSlotData(data.slot)
  1042. if self:IsHeroSlot(data.slot.hero_id) then
  1043. self:InitHeroAttrFromBattle()
  1044. ManagerContainer.RedPointMgr.HeroRPCtr:HeroEquipNotify()
  1045. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_EQUIP_REFRESH)
  1046. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.MAIN_UI_ROLE_REDPOINT_NOTICE)
  1047. else
  1048. ManagerContainer.DataMgr.PartnerData:InitPartnerAttrById(data.slot.hero_id)
  1049. --ManagerContainer.RedPointMgr.HeroRPCtr:PartnerRedPointNotifyById(data.slot.hero_id)
  1050. --ManagerContainer.RedPointMgr.HeroRPCtr:HeroEquipNotify()
  1051. ManagerContainer.RedPointMgr.HeroRPCtr:PartnerEquipNotify()
  1052. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_EQUIP_REFRESH)
  1053. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.MAIN_UI_ROLE_REDPOINT_NOTICE)
  1054. end
  1055. end)
  1056. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_EQUIP_SLOT_LEVEL_UP_ACK, function(data)
  1057. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.SLOT_REFINE_LV_UP_SUCCESS, data.error)
  1058. end)
  1059. -- 名字修改
  1060. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_NAME_ACK, self.OnUserNameChanged, self)
  1061. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_RENAME_ACK, self.OnUserNameChanged, self)
  1062. --战力修改
  1063. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_FIGHT_POWER_CHAGNE_NTF, function(data)
  1064. --LogError(Inspect(data))
  1065. if not self.data.roleBase then return end
  1066. local IsSaveSidePower = false
  1067. --保存未上阵的处理 英雄战力 宠物战力(服务器约定 不为空 只同步未上阵的 战斗力) 为空走正常战力修改
  1068. if nil ~= data.data.actor_fightpower then
  1069. for _,v in pairs(data.data.actor_fightpower) do
  1070. if v ~= nil then
  1071. local Id = v.hero_id
  1072. local fightPower = v.hero_fight_power or 0
  1073. local petFightPower = v.pet_fight_power or 0
  1074. if fightPower > 0 then
  1075. self:AddAsideFighterSvrPower(Id,false,fightPower)
  1076. end
  1077. if petFightPower > 0 then
  1078. self:AddAsideFighterSvrPower(Id,true,petFightPower)
  1079. end
  1080. IsSaveSidePower = true
  1081. end
  1082. end
  1083. if IsSaveSidePower then
  1084. --LogError("未上阵SAVE")
  1085. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.SIDEFIGHTPOWER_REFRESH)
  1086. return
  1087. end
  1088. end
  1089. --上阵的战力修改 保存当前战力 弹窗显示
  1090. --LogError("Save 上阵")
  1091. local lastFightPower = self:GetTotalFightPower()
  1092. self:InitRoleFightPower(data.data)
  1093. local newFightPower = self:GetTotalFightPower()
  1094. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.FIGHTPOWER_REFRESH)
  1095. if newFightPower > lastFightPower then
  1096. local data = {startNum = lastFightPower, endNum = newFightPower}
  1097. ManagerContainer.LuaUIMgr:FightPowerAddNotice(data)
  1098. end
  1099. end)
  1100. --寻宝NTF
  1101. -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GET_BATTLE_BOX_NTF, function(data)
  1102. -- ManagerContainer.DataMgr.TreasureData:InitTreasureData(data)
  1103. -- end)
  1104. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_RESET_ATTR_POINT_ACK, function(data)
  1105. if data.error == Enum.NetErrorCode.ERROR_OK then
  1106. if data.hero_id == 1 then
  1107. self:RefreshAddPointAttr()
  1108. ManagerContainer.RedPointMgr.HeroRPCtr:HeroAttrRPNotify()
  1109. else
  1110. ManagerContainer.DataMgr.PartnerData:RefreshAddPointAttr(data.hero_id)
  1111. ManagerContainer.RedPointMgr.HeroRPCtr:PartnerAttrRPNotify(data.hero_id)
  1112. end
  1113. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_ATTR_ADD_SUCCESS, true)
  1114. end
  1115. end)
  1116. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HERO_CHANGE_JOB_ACK, function (data)
  1117. if data.error == Enum.NetErrorCode.ERROR_OK then
  1118. self:OnChangeJobAck(data)
  1119. end
  1120. end)
  1121. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HERO_REPLACE_JOB_ACK, function (data)
  1122. if data.error == Enum.NetErrorCode.ERROR_OK then
  1123. self:OnChangeJobAck(data, true)
  1124. end
  1125. end)
  1126. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HERO_FIGH_POWER_ACK, function(data)
  1127. if data.error == Enum.NetErrorCode.ERROR_OK then
  1128. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.FIGHTPOWER_PARTNER_ACK)
  1129. end
  1130. end)
  1131. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_VIP_CHANGE_NTF, self.OnVipChangedNtf, self)
  1132. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SKILL_SLOT_DATA_NTF,self.OnSkillSlotDataNtf,self)
  1133. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_JOB_SKILL_DATA_NTF,self.OnJobSkillDataNtf,self)
  1134. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ACTIVE_SKILL_ACK,self.OnActiveSkillAck,self)
  1135. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SKILL_LEVEL_UP_ACK, self.OnSkillLevelUpAck,self)
  1136. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SET_SKILL_LIST_ACK, self.OnSetSkillListAck,self)
  1137. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_RESET_SKILL_LEVEL_ACK, self.OnResetSkillLvAck,self)
  1138. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SKILL_RESET_COUNT_NTF, self.OnSkillResetCountNtf,self)
  1139. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CREATE_ROLE_ACK, self.OnCreateRoleAck, self)
  1140. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ROLE_RED_NTF, function(data)
  1141. self:RefreshRedState(data.red)
  1142. end)
  1143. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SET_HEAD_ID_ACK, self.OnSetHeadIdAck, self)
  1144. --头像交互功能
  1145. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GET_OTHER_PLAYER_DETAIL_INFO_ACK, self.SCGetOtherPlayerDetailInfoAck, self)
  1146. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_USE_ITEM_ACK, self.OnUseItemAck, self)
  1147. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CARD_SLOT_CHANGE_NTF, self.CardSlotChangeNtf, self)
  1148. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_STARTUP_INFO_END_NTF, self.StartUpEnd, self)
  1149. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GIFT_REWARD_ACK, self.OnGiftRewardAck, self)
  1150. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_QUESTION_REWARD_ACK, self.OnQuestionRewardAck, self)
  1151. end
  1152. function UserData:RoleChangeJobAttrSuccess()
  1153. self:InitHeroAttrFromBattle()
  1154. --ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_ATTR_ADD_SUCCESS)
  1155. end
  1156. function UserData:OnCreateRoleAck(data)
  1157. if data.error == 0 then
  1158. self.createRole = true
  1159. local gameRoleInfo = SDKMgr.Instance:GetGameRoleInfo()
  1160. if gameRoleInfo then
  1161. gameRoleInfo.openId = ManagerContainer.LuaGameMgr.openId
  1162. local serverData = ManagerContainer.LuaGameMgr.serverData
  1163. if serverData then
  1164. gameRoleInfo.serverId = serverData.id
  1165. gameRoleInfo.serverName = serverData.name
  1166. end
  1167. gameRoleInfo.roleId = tostring(data.uid) or ''
  1168. gameRoleInfo.roleName = ""
  1169. gameRoleInfo.roleLv = 0
  1170. gameRoleInfo.roleCreateTime = data.create_role_time
  1171. gameRoleInfo.roleUpLvTime = data.create_role_time
  1172. gameRoleInfo.vipLv = 0
  1173. gameRoleInfo.gender = tostring(data.gender) or ''
  1174. gameRoleInfo.jobId = 0
  1175. gameRoleInfo.jobName = ""
  1176. gameRoleInfo.guildId = 0
  1177. gameRoleInfo.guildName = ""
  1178. gameRoleInfo.fightPower = 0
  1179. end
  1180. SDKMgr.Instance:CreateRole()
  1181. SDKMgr.Instance:ReportCreateRole()
  1182. end
  1183. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_CREATE_ROLE_FAILED,data.error)
  1184. end
  1185. function UserData:CardSlotChangeNtf(data)
  1186. ManagerContainer.RedPointMgr.HeroRPCtr:RoleCardSlotRPNotify(data.slot_list)
  1187. end
  1188. function UserData:InitRedState(data)
  1189. self.data.mailRedState = data.is_unread_mail
  1190. end
  1191. function UserData:HasPassedNewbie()
  1192. -- return CommonUtil.And(self:GetGuideId(),1) == 1
  1193. return true
  1194. end
  1195. function UserData:RefreshRedState(data)
  1196. self.data.mailRedState = data.is_unread_mail
  1197. end
  1198. function UserData:CompareDataChange(lastData)
  1199. local changedRes = {}
  1200. if lastData.roleBase.coin ~= self.data.roleBase.coin then
  1201. changedRes[Enum.ItemIds.Coin] = (self.data.roleBase.coin - lastData.roleBase.coin)
  1202. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.COIN_CHANGED)
  1203. end
  1204. if lastData.roleBase.diamond ~= self.data.roleBase.diamond then
  1205. changedRes[Enum.ItemIds.Diamond] = (self.data.roleBase.diamond - lastData.roleBase.diamond)
  1206. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.DIAMOND_CHANGED)
  1207. end
  1208. if lastData.roleBase.roleData.cruise ~= self.data.roleBase.roleData.cruise then
  1209. changedRes[Enum.ItemIds.SkillExp] = (self.data.roleBase.roleData.cruise - lastData.roleBase.roleData.cruise)
  1210. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_CRUISE_CHANGED)
  1211. end
  1212. if lastData.roleBase.roleData.heroData.baseLevel ~= self.data.roleBase.roleData.heroData.baseLevel then
  1213. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_LV_CHANGED, self:GetId())
  1214. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_LV_CHANGED)
  1215. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_EXP_CHANGED)
  1216. --等级改变 同步
  1217. ManagerContainer.LuaBattleMgr:SetTeamData(true,false)
  1218. elseif lastData.roleBase.roleData.baseExp ~= self.data.roleBase.roleData.baseExp then
  1219. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_EXP_CHANGED)
  1220. end
  1221. if lastData.roleBase.roleData.jobLevel ~= self.data.roleBase.roleData.jobLevel then
  1222. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.JOB_LV_CHANGED)
  1223. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.JOB_EXP_CHANGED)
  1224. elseif lastData.roleBase.roleData.jobExp ~= self.data.roleBase.roleData.jobExp then
  1225. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.JOB_EXP_CHANGED)
  1226. end
  1227. local lastResMap = lastData.roleBase.resMap
  1228. local curResMap = self.data.roleBase.resMap
  1229. for k,v in pairs(curResMap) do
  1230. local lastV = lastResMap[k]
  1231. if lastV ~= v then
  1232. changedRes[k] = v - (lastV or 0)
  1233. end
  1234. lastResMap[k] = nil
  1235. end
  1236. for k, v in pairs(lastResMap) do
  1237. changedRes[k] = -v
  1238. end
  1239. for key, value in pairs(changedRes) do
  1240. if key == Enum.RoleResType.HeroSpirit then
  1241. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_HERO_SPIRIT_CHANGED, value)
  1242. elseif key == Enum.ItemType.EvilExp then
  1243. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_ROLE_EVIL_EXP_CHANGED)
  1244. elseif key == Enum.ItemType.AdvanceSkillExp then
  1245. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_ADVANCESKILLEXP_CHANGED)
  1246. elseif key == Enum.ItemType.ROCoin then
  1247. --LogError("=================ROCOIN_CHANGED=========")
  1248. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROCOIN_CHANGED)
  1249. elseif key == Enum.ItemType.BoliShopExp then
  1250. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROBOLISHOP_EXP_CHANGE)
  1251. end
  1252. end
  1253. if not CommonUtil.TableIsEmpty(changedRes) then
  1254. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.CURRENY_CHANGED, changedRes)
  1255. end
  1256. end
  1257. function UserData:GetCardBuffs(index)
  1258. local list = {}
  1259. local slots = self:GetCurSlotInfos(index)
  1260. if slots ~= nil then
  1261. for i = 1,#slots do
  1262. if slots[i].equip_id > 0 then
  1263. local cardList = slots[i].card_id_list
  1264. for _,v in pairs(cardList) do
  1265. if v > 0 then
  1266. local cardData = ManagerContainer.CfgMgr:GetCardDataById(v)
  1267. if cardData.BUFF ~= nil then
  1268. for _,v1 in pairs(cardData.BUFF) do
  1269. list[#list + 1] = v1
  1270. end
  1271. end
  1272. end
  1273. end
  1274. end
  1275. end
  1276. end
  1277. return list
  1278. end
  1279. function UserData:GetTeamData(ignore)
  1280. local battleIds = {}
  1281. local petId = self.data.roleBase.roleData.heroData.battlePetId
  1282. local petData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(petId)
  1283. local data = {
  1284. uid = self.data.roleBase.roleData.heroData.id,
  1285. id = self.data.roleBase.roleCfgId,
  1286. jobId = self.data.roleBase.roleData.heroData.configId,
  1287. lv = self.data.roleBase.roleData.heroData.baseLevel,
  1288. headFrameId = self.data.roleBase.roleData.headFrameId,
  1289. role = false,
  1290. mainRole = true,
  1291. -- skills = ManagerContainer.DataMgr.SkillsData:GetUsedSkills(),
  1292. skills = self.data.roleBase.roleData.heroData.skillData:GetUsedSkills(),
  1293. buffs = self:GetCardBuffs(1),
  1294. fashion = self:GetViewData(),
  1295. petId = petId > 0 and petId + Enum.ActorUidField.Pet or 0,
  1296. petBaseId = petData and petData.cfgId or 0,
  1297. Name = self:GetUserNickname()
  1298. }
  1299. CommonUtil.ReplaceBattleSkillBySkillEquip(self.data.roleBase.roleData.heroData, data.skills)
  1300. battleIds[#battleIds + 1] = data
  1301. local list = ManagerContainer.DataMgr.PartnerData:GetBattlePartnerDatas(attrsChanged, ignore)
  1302. if list then
  1303. for _,v in pairs(list) do
  1304. battleIds[#battleIds + 1] = v
  1305. end
  1306. end
  1307. --lastTeamEquipAttrs = lastEquipAttrs
  1308. --lastTeamCardAttrs = lastCardAttrs
  1309. attrsChanged = false
  1310. self:SyncFashionToActorData()
  1311. return battleIds
  1312. end
  1313. function UserData:GetHeroActorParam()
  1314. local actors = System.Array.CreateInstance(Enum.TypeInfo.ActorData, 1)
  1315. actors[0] = ManagerContainer.LuaActorDataMgr:GetActorData(true,0)
  1316. return actors
  1317. end
  1318. function UserData:GetSuitNum(slots, slotType)
  1319. if slots == nil then return 0 end
  1320. if slots[slotType].equip_id == 0 then return 0 end
  1321. local suits = {}
  1322. local equipData = ManagerContainer.CfgMgr:GetEquipById(slots[slotType].equip_id)
  1323. if not equipData then
  1324. return
  1325. end
  1326. local suitNum = 0
  1327. if equipData.Suit == 0 then
  1328. return suitNum, suits
  1329. end
  1330. local suitId = ManagerContainer.CfgMgr:GetEquipSuitById(equipData.Suit)
  1331. for i = 1, #slots do
  1332. if slots[i].equip_id > 0 then
  1333. local equipData1 = ManagerContainer.CfgMgr:GetEquipById(slots[i].equip_id)
  1334. local suitId1 = ManagerContainer.CfgMgr:GetEquipSuitById(equipData1.Suit)
  1335. if suitId == suitId1 or equipData1.EquipLevel >= equipData.EquipLevel then
  1336. suitNum = suitNum + 1
  1337. suits[equipData1.Type] = equipData1.Name
  1338. end
  1339. end
  1340. end
  1341. return suitNum, suits
  1342. end
  1343. function UserData:GetMinRefineLevel(slots)
  1344. if slots == nil then return 0 end
  1345. local minLv = 100
  1346. for i = 1, #slots do
  1347. if slots[i].level < minLv then
  1348. minLv = slots[i].level
  1349. end
  1350. end
  1351. if minLv == 100 then
  1352. return 0
  1353. end
  1354. if minLv >= 3 then
  1355. return minLv
  1356. end
  1357. return 0
  1358. end
  1359. function UserData:GetSlotsEquipAttr(slots)
  1360. if slots == nil then return nil end
  1361. local baseAttrs = {}
  1362. for _,v in pairs(Enum.HeroAttrType) do
  1363. baseAttrs[v] = 0
  1364. end
  1365. local suitIds = {}
  1366. local suitCounts = {}
  1367. local refineSuitLv = self:GetMinRefineLevel(slots)
  1368. for i = 1,#slots do
  1369. if slots[i].equip_id > 0 then
  1370. local suitNum = ManagerContainer.DataMgr.UserData:GetSuitNum(slots, i)
  1371. local equipCfgData = ManagerContainer.CfgMgr:GetEquipById(slots[i].equip_id)
  1372. local refineData = ManagerContainer.CfgMgr:GetEquipRefineDataByLv(slots[i].level)
  1373. for k,v in pairs(Enum.HeroAttrType) do
  1374. if equipCfgData[k] and equipCfgData[k] ~= 0 then
  1375. if v < Enum.HeroAttrType.STR_Percent then
  1376. local refineAdd = equipCfgData[k]*(refineData ~= nil and ((refineData.Result + 100)*0.01) or 1)
  1377. baseAttrs[Enum.HeroAttrType[k]] = baseAttrs[Enum.HeroAttrType[k]] + refineAdd
  1378. end
  1379. end
  1380. if refineSuitLv > 0 then
  1381. for j = refineSuitLv, 1, -1 do
  1382. local data = ManagerContainer.CfgMgr:GetEquipRefineDataByLv(j)
  1383. local refineEff = data["Suit"]
  1384. if refineEff ~= nil and #refineEff > 0 and refineEff[1] == Enum.HeroAttrType[k] then
  1385. if v >= Enum.HeroAttrType.STR_Percent then
  1386. baseAttrs[Enum.HeroAttrType[k]] = baseAttrs[Enum.HeroAttrType[k]] + refineEff[1]
  1387. end
  1388. end
  1389. end
  1390. end
  1391. end
  1392. if equipCfgData.Suit > 0 and not CommonUtil.EleInTable(equipCfgData.Suit, suitIds) then
  1393. suitIds[#suitIds + 1] = equipCfgData.Suit
  1394. suitCounts[equipCfgData.Suit] = math.floor(suitNum/2)
  1395. end
  1396. end
  1397. end
  1398. for i = 1,#suitIds do
  1399. local suitCfgData = ManagerContainer.CfgMgr:GetEquipSuitById(suitIds[i])
  1400. for j = 1, suitCounts[suitIds[i]] do
  1401. if suitCfgData["Suit"..j] ~= nil then
  1402. for k, v in pairs(suitCfgData["Suit"..j]) do
  1403. if type(v) == "table" then
  1404. if baseAttrs[v[1]] == nil then
  1405. baseAttrs[v[1]] = v[2]
  1406. else
  1407. baseAttrs[v[1]] = baseAttrs[v[1]] + v[2]
  1408. end
  1409. else
  1410. if baseAttrs[suitCfgData["Suit"..j][1]] == nil then
  1411. baseAttrs[suitCfgData["Suit"..j][1]] = suitCfgData["Suit"..j][2]
  1412. else
  1413. baseAttrs[suitCfgData["Suit"..j][1]] = baseAttrs[suitCfgData["Suit"..j][1]] + suitCfgData["Suit"..j][2]
  1414. end
  1415. break
  1416. end
  1417. end
  1418. end
  1419. end
  1420. end
  1421. for k, v in pairs(Enum.HeroAttrType) do
  1422. if v >= Enum.HeroAttrType.STR_Percent then
  1423. baseAttrs[v] = baseAttrs[v]*0.0001
  1424. end
  1425. end
  1426. for k, v in pairs(Enum.HeroAttrType) do
  1427. if v < Enum.HeroAttrType.STR_Percent then
  1428. baseAttrs[v] = baseAttrs[v]*(1 + baseAttrs[v + 30])
  1429. end
  1430. end
  1431. for k, v in pairs(Enum.HeroAttrType) do
  1432. if v >= Enum.HeroAttrType.STR_Percent then
  1433. baseAttrs[v] = 0
  1434. end
  1435. end
  1436. return baseAttrs
  1437. end
  1438. function UserData:GetSlotsCardAttr(slots)
  1439. if slots == nil then return nil end
  1440. local baseAttrs = {}
  1441. for _,v in pairs(Enum.HeroAttrType) do
  1442. baseAttrs[v] = 0
  1443. end
  1444. for i = 1,#slots do
  1445. --if slots[i].equip_id > 0 then
  1446. local cardList = slots[i].card_id_list
  1447. for _,v in pairs(cardList) do
  1448. if v > 0 then
  1449. local cardData = ManagerContainer.CfgMgr:GetCardDataById(v)
  1450. for _,v1 in pairs(CommonUtil.DeserializeCfgItemList(cardData.Attribute1)) do
  1451. if v1[1] < Enum.HeroAttrType.STR_Percent then
  1452. baseAttrs[v1[1]] = baseAttrs[v1[1]] + v1[2]
  1453. else
  1454. baseAttrs[v1[1]] = baseAttrs[v1[1]] + v1[2]*0.0001
  1455. end
  1456. end
  1457. end
  1458. end
  1459. --end
  1460. end
  1461. return baseAttrs
  1462. end
  1463. function UserData:Clear()
  1464. self.data = {}
  1465. self:ClearFighterSvrPowers()
  1466. baseAttrs = nil
  1467. lastEquipAttrs = nil
  1468. lastCardAttrs = nil
  1469. lastFashionAttrs = nil
  1470. lastTeamEquipAttrs = nil
  1471. lastTeamCardAttrs = nil
  1472. lastPointAttrs = nil
  1473. lastBaseAttrs = nil
  1474. lastSkillAttrs = nil
  1475. lastPetAttrs = nil
  1476. lastHeadFrameAttrs = nil
  1477. lastKeepSakeAttrs = nil
  1478. self.initedOver = false
  1479. --self:UnRegisterNetEvents()
  1480. self.createRole = nil
  1481. self.createRoleTime = nil
  1482. self.roleUpLvTime = nil
  1483. self.loginTime = nil
  1484. end
  1485. function UserData:Destroy()
  1486. if self.Clear then
  1487. self:Clear()
  1488. self:ClearFighterSvrPowers()
  1489. end
  1490. self:UnRegisterNetEvents()
  1491. end
  1492. function UserData:UnRegisterNetEvents()
  1493. --ManagerContainer.NetManager:UnRegisterPbNameCallback("SC_CREATE_ROLE_ACK")
  1494. --ManagerContainer.NetManager:UnRegisterPbNameCallback("SC_STARTUP_INFO_NTF")
  1495. end
  1496. function UserData:GetCurrency(type)
  1497. if type == Enum.ItemType.Coin then
  1498. return self.data.roleBase.coin
  1499. end
  1500. if type == Enum.ItemType.Diamond then
  1501. return self.data.roleBase.diamond
  1502. end
  1503. if type == Enum.ItemType.RoleBaseExp then
  1504. return self.data.roleBase.roleData.baseExp
  1505. end
  1506. if type == Enum.ItemType.RoleJobExp then
  1507. return self.data.roleBase.roleData.jobExp
  1508. end
  1509. if type == Enum.ItemType.ParterExp then
  1510. return self.data.roleBase.roleData.heroExp
  1511. end
  1512. if type == Enum.ItemType.SkillExp then
  1513. return self.data.roleBase.roleData.cruise
  1514. end
  1515. if type == Enum.ItemType.AdvanceSkillExp then
  1516. return self.data.roleBase.resMap[Enum.ItemType.AdvanceSkillExp] or 0
  1517. end
  1518. return self:GetResById(type)
  1519. end
  1520. function UserData:OnSetHeadIdAck(data)
  1521. if not data then return end
  1522. local headPortraitId = data.head_id
  1523. local cfgData = ManagerContainer.CfgMgr:GetHeadPortraitDataById(headPortraitId)
  1524. if not cfgData then return end
  1525. self:InitHeadPortrait(headPortraitId)
  1526. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.USER_HEADPROTRAIT_CHANGED)
  1527. end
  1528. function UserData:OnUserNameChanged(data)
  1529. if data.error ~= 0 then return end
  1530. if not data.name or data.name == '' then return end
  1531. self.data.roleBase.nickname = data.name
  1532. local mainActor = ManagerContainer.LuaActorDataMgr:GetHeroActorData(1)
  1533. if mainActor ~= nil then
  1534. mainActor.Name = ManagerContainer.DataMgr.UserData:GetUserNickname()
  1535. end
  1536. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.NICK_NAME_CREATED)
  1537. end
  1538. --增加对应压制mark
  1539. function UserData:SetActorPveMark(ActorId,actor)
  1540. --LogError(tostring(ActorId))
  1541. local skillData = self:GetSkillData(ActorId)
  1542. if nil == skillData then
  1543. return
  1544. end
  1545. local currNerveLv = skillData:GetCurrNerveLv()
  1546. local allCfgDatas = ManagerContainer.CfgMgr:GetAllSkillSuitNewCfg()
  1547. if currNerveLv > 0 then --设置压制ID
  1548. for k, v in pairs(allCfgDatas) do
  1549. if v.Id == currNerveLv then
  1550. local mark = GvGMark.New(v.buffid, 1)
  1551. actor:SetPveMark(mark)
  1552. --LogError("添加压制markid"..tostring(v.buffid))
  1553. end
  1554. end
  1555. end
  1556. end
  1557. function UserData:OnVipChangedNtf(data)
  1558. -- LogError('[Wboy] OnVipChangedNtf ' .. Inspect(data))
  1559. if ManagerContainer.NetManager:IsErrorData(data) then
  1560. return
  1561. end
  1562. local exp = self.data.roleBase.resMap[Enum.ItemType.VipExp] or 0
  1563. local lv = self.data.roleBase.vipLv
  1564. local newExp = data.vip_exp
  1565. local newLv = data.vip_level
  1566. self.data.roleBase.resMap[Enum.ItemType.VipExp] = newExp
  1567. self.data.roleBase.vipLv = newLv
  1568. if newLv ~= lv then
  1569. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.VIP_LV_CHANGED, lv, newLv)
  1570. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.UI_VIP_FUNCLOCK_OPEN_NTF, Enum.TaskType.VIP_Level)
  1571. end
  1572. if newExp ~= exp then
  1573. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.VIP_EXP_CHANGED, newLv, exp, newExp)
  1574. end
  1575. end
  1576. function UserData:GetHeroLv(heroId)
  1577. if self:IsLeaderHero(heroId) then
  1578. return self:GetRoleLv()
  1579. else
  1580. return ManagerContainer.DataMgr.PartnerData:GetHeroLv(heroId)
  1581. end
  1582. end
  1583. --- 获得英雄的jobCfgId
  1584. ---@return integer 主角是JobCfgId, 伙伴是PartnerCfgId
  1585. function UserData:GetHeroJobCfgId(heroId)
  1586. if self:IsLeaderHero(heroId) then
  1587. return self:GetJobCfgId()
  1588. else
  1589. return ManagerContainer.DataMgr.PartnerData:GetHeroCfgId(heroId)
  1590. end
  1591. end
  1592. ----------------------------- 未上阵的 战斗力数据
  1593. function UserData:GetAOrCreatesideFighterSvrPower()
  1594. if nil == self.AsideFighterPower then
  1595. self.AsideFighterPower = {}
  1596. end
  1597. return self.AsideFighterPower
  1598. end
  1599. function UserData:ClearFighterSvrPowers()
  1600. self.AsideFighterPower = {}
  1601. end
  1602. function UserData:AddAsideFighterSvrPower(Id,IsPet,Power)
  1603. --LogError("AddAsideFighterPower"..tostring(Id))
  1604. local tbFigherPower = self:GetAOrCreatesideFighterSvrPower()
  1605. for k,v in pairs(tbFigherPower) do
  1606. if v.Id == Id and v.IsPet == IsPet then
  1607. v.Power = Power
  1608. return
  1609. end
  1610. end
  1611. local PowerInfo = {Id = Id,IsPet = IsPet,Power = Power}
  1612. table.insert( tbFigherPower , PowerInfo)
  1613. end
  1614. function UserData:RemoveAsideFighterSvrPower(Id,IsPet)
  1615. local NewTb = {}
  1616. local tbFigherPower = self:GetAOrCreatesideFighterSvrPower()
  1617. for k,v in pairs(tbFigherPower) do
  1618. local IsInsert = true
  1619. if v.Id == Id and v.IsPet == IsPet then
  1620. IsInsert = false
  1621. end
  1622. if IsInsert then
  1623. table.insert(NewTb,v)
  1624. end
  1625. end
  1626. self.AsideFighterPower = NewTb
  1627. end
  1628. function UserData:GetAsideFighterSvrPower(Id,IsPet)
  1629. local tbFigherPower = self:GetAOrCreatesideFighterSvrPower()
  1630. for k,v in pairs(tbFigherPower) do
  1631. if v.Id == Id and v.IsPet == IsPet then
  1632. return v.Power
  1633. end
  1634. end
  1635. return -1 --服务器未同步计算
  1636. end
  1637. ----------------------------
  1638. ------------------------------- 技能相关 Start -------------------------------
  1639. function UserData:GetSkillData(heroId)
  1640. local skillData = nil
  1641. local heroData = nil
  1642. if self:IsLeaderHero(heroId) then
  1643. heroData = self.data.roleBase.roleData.heroData
  1644. skillData = heroData.skillData
  1645. else
  1646. heroData = ManagerContainer.DataMgr.PartnerData:GetPartnerDataByUniqueId(heroId)
  1647. skillData = heroData and heroData.skillData or nil
  1648. end
  1649. return skillData, heroData
  1650. end
  1651. function UserData:GetAllUnlockRoleSkillPress()
  1652. local maxPress = 0
  1653. local skillData = self.data.roleBase.roleData.heroData.skillData
  1654. if skillData then
  1655. maxPress = maxPress + skillData:GetMaxPress()
  1656. end
  1657. local allPartners = ManagerContainer.DataMgr.PartnerData:GetPartnerDatas()
  1658. for k, v in pairs(allPartners) do
  1659. if v.skillData then
  1660. maxPress = maxPress + v.skillData:GetMaxPress()
  1661. end
  1662. end
  1663. return maxPress
  1664. end
  1665. function UserData:GetCurrRoleSkillPress()
  1666. return self.data.roleBase.RepressSkillPvpVal or 0
  1667. end
  1668. function UserData:OnJobSkillDataNtf(data)
  1669. if ManagerContainer.NetManager:IsErrorData(data) then return end
  1670. local heroId = data.hero_id
  1671. local skillData, heroData = self:GetSkillData(heroId)
  1672. if skillData then
  1673. local isSlotChanged, newSkills, upLvSkills, downLvSkills = skillData:OnJobSkillDataChange(data)
  1674. local isRefeSelectId = false
  1675. if newSkills and #newSkills > 0 then
  1676. -- 获得新技能
  1677. ManagerContainer.NewGotTipsMgr:AddShowData(1, newSkills)
  1678. isRefeSelectId = true
  1679. self:ReportStudySkill(heroId, newSkills, true)
  1680. end
  1681. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_SKILL_CHANGED, heroId, newSkills, upLvSkills, downLvSkills,isRefeSelectId)
  1682. if isSlotChanged then
  1683. self:RefreshActorDataSkill(heroData, skillData)
  1684. end
  1685. else
  1686. LogError("[Wboy] SC_JOB_SKILL_DATA_NTF Hero SkillData is not Find, heroId = " .. tostring(heroId) .. "\n" .. Inspect(data))
  1687. end
  1688. local isChanged
  1689. if self:IsLeaderHero(heroId) then
  1690. isChanged = self:CalcSkillAttrs()
  1691. else
  1692. isChanged = ManagerContainer.DataMgr.PartnerData:OnJobSkillDataChanged(heroId)
  1693. end
  1694. if isChanged then
  1695. --ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_ATTR_ADD_SUCCESS)
  1696. end
  1697. end
  1698. function UserData:ReportStudySkill(heroId, newSkills, success)
  1699. if not SDKMgr.Instance:IsReportAction() then
  1700. return
  1701. end
  1702. if self:IsLeaderHero(heroId) then
  1703. for i = 1, #newSkills do
  1704. local datas = System.Collections.Generic.Dictionary_object_object()
  1705. datas:Add('event', 'mj_roleskill')
  1706. datas:Add('num', newSkills[i].skillId)
  1707. SDKMgr.Instance:ReportAction(datas)
  1708. end
  1709. else
  1710. local datas = System.Collections.Generic.Dictionary_object_object()
  1711. datas:Add('event', 'mj_heroskill')
  1712. datas:Add('is_achieve', (success and 1 or 0))
  1713. SDKMgr.Instance:ReportAction(datas)
  1714. end
  1715. end
  1716. function UserData:OnSkillSlotDataNtf(data)
  1717. if ManagerContainer.NetManager:IsErrorData(data) then return end
  1718. local heroId = data.hero_id
  1719. local skillData, heroData = self:GetSkillData(heroId)
  1720. if skillData then
  1721. skillData:OnSkillSlotDataChange(data)
  1722. self:RefreshActorDataSkill(heroData, skillData)
  1723. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_SKILL_SLOT_CHANGED, heroId)
  1724. else
  1725. LogError("[Wboy] SC_SET_SKILL_LIST_ACK Hero SkillData is not Find, heroId = " .. tostring(heroId) .. "\n" .. Inspect(data))
  1726. end
  1727. end
  1728. function UserData:RefreshActorDataSkill(heroData, skillData)
  1729. local heroId = heroData.id
  1730. local heroActorData = nil
  1731. local isBattle = false
  1732. if self:IsLeaderHero(heroId) then
  1733. heroActorData = ManagerContainer.LuaActorDataMgr:GetActorData(true, 0)
  1734. isBattle = true
  1735. else
  1736. if heroData.owned then
  1737. heroActorData = ManagerContainer.LuaActorDataMgr:GetActorData(false, heroData.configId)
  1738. end
  1739. isBattle = heroData.isBattle
  1740. end
  1741. if heroActorData then
  1742. if isBattle then
  1743. local usedSkills = skillData:GetUsedSkills() or {}
  1744. CommonUtil.ReplaceBattleSkillBySkillEquip(heroData, usedSkills)
  1745. ManagerContainer.LuaGameMgr:UpdateTeamSkills({{ uid = heroData.id, skills = usedSkills }})
  1746. else
  1747. local usedSkillParams = skillData:GetUsedSkillParams()
  1748. CommonUtil.ReplaceBattleSkillBySkillEquip(heroData, usedSkillParams)
  1749. heroActorData:RefreshSkills(usedSkillParams)
  1750. end
  1751. end
  1752. end
  1753. function UserData:OnActiveSkillAck(data)
  1754. ManagerContainer.LuaBattleMgr:SetTeamData(true,true)
  1755. -- if ManagerContainer.NetManager:IsErrorData(data) then
  1756. -- LogError("[Wboy] SC_ACTIVE_SKILL_ACK is Error " .. Inspect(data))
  1757. -- end
  1758. end
  1759. function UserData:OnSkillLevelUpAck(data)
  1760. -- if ManagerContainer.NetManager:IsErrorData(data) then
  1761. -- LogError("[Wboy] SC_SKILL_LEVEL_UP_ACK is Error " .. Inspect(data))
  1762. -- end
  1763. end
  1764. function UserData:OnSetSkillListAck(data)
  1765. ManagerContainer.LuaBattleMgr:SetTeamData(true,true)
  1766. -- if ManagerContainer.NetManager:IsErrorData(data) then
  1767. -- LogError("[Wboy] SC_SET_SKILL_LIST_ACK is Error " .. Inspect(data))
  1768. -- end
  1769. end
  1770. function UserData:OnResetSkillLvAck(data)
  1771. if ManagerContainer.NetManager:IsErrorData(data) then return end
  1772. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('SkillResetDscTxt3')
  1773. end
  1774. function UserData:OnSkillResetCountNtf(data)
  1775. if ManagerContainer.NetManager:IsErrorData(data) then return end
  1776. local lastCount = self:GetSkillResetCount()
  1777. local count = data.reset_count or -1
  1778. if lastCount == count then return end
  1779. self.data.roleBase.roleData.skillResetCount = count
  1780. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_SKILL_RESET_LV_COUNT_CHANGED)
  1781. end
  1782. function UserData:IsLeaderHero(heroId)
  1783. return heroId == 1
  1784. end
  1785. ------------------------------- 技能相关 End -------------------------------
  1786. --开启了好友的信息界面
  1787. function UserData:SCGetOtherPlayerDetailInfoAck(_data, isCross)
  1788. if not isCross then isCross = false end
  1789. _data._targetTag = 1;
  1790. _data._isCross = isCross;
  1791. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIRoleMessage, _data) --打开头像交互界面,显示好友的信息
  1792. end
  1793. --使用item的返回
  1794. function UserData:OnUseItemAck(_data)
  1795. if ManagerContainer.NetManager:IsErrorData(_data) then
  1796. -- LogError("使用商品消息错误返回,错误码:" .. tostring(_data.error));
  1797. return
  1798. end
  1799. CommonUtil.ACKShowRewardList(_data.item_list)
  1800. end
  1801. function UserData:StartUpEnd()
  1802. if not self.initedOver then
  1803. self.initedOver = true
  1804. ManagerContainer.LuaActorAttributeMgr:SendAttrReq()
  1805. ManagerContainer.DataMgr.PetDataMgr:InitPetRelationAttrs()
  1806. ManagerContainer.LuaBattleMgr:SetTeamData(true,true)
  1807. ManagerContainer.LuaGameMgr:LoadGameSpeed()
  1808. ManagerContainer.RedPointMgr.HeroRPCtr:RoleRedPointNotify()
  1809. ManagerContainer.RedPointMgr.HeroRPCtr:SkillUnlockNotify()
  1810. ManagerContainer.DataMgr.FriendDataMgr:RequestAllData()
  1811. ManagerContainer.DataMgr.MailData:QueryMailData()
  1812. ManagerContainer.DataMgr.GuildDataMgr:SendGuildLoginReq()
  1813. ManagerContainer.DataMgr.CollectionBookData:QueryCardHandBook()
  1814. ManagerContainer.DataMgr.KeepSakeBookData:QueryKeepSakeHandBook()
  1815. ManagerContainer.DataMgr.SignData:QuerySignUpInfoReq()
  1816. ManagerContainer.PayMgr:SendStartUpPayComplete()
  1817. ManagerContainer.DataMgr.RankActivitiesMgr:QueryRankActivitiesData(true)
  1818. ManagerContainer.DataMgr.RuneShopDataMgr:QueryAirShipActivityData()
  1819. -- ManagerContainer.DataMgr.RuneShopDataMgr:SendShopInfoReq(Enum.RuneShopType.MonthCard,nil)
  1820. ManagerContainer.LuaUIMgr:CloseInputMask()
  1821. --重连后刷新顶部资源
  1822. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.COIN_CHANGED)
  1823. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.DIAMOND_CHANGED)
  1824. self:StartEnterGame()
  1825. self:SDKEnterGame()
  1826. -- 给服务器发送数据,用于Log
  1827. local deviceSystemData = SDKMgr.Instance:GetDeviceSystemData()
  1828. if deviceSystemData then
  1829. local msgData = {
  1830. client_info = {
  1831. device_model = deviceSystemData.deviceModel,
  1832. device_height = deviceSystemData.deviceHeight,
  1833. device_width = deviceSystemData.deviceWidth,
  1834. os_name = deviceSystemData.osName,
  1835. os_ver = deviceSystemData.osVer,
  1836. mac_addr = deviceSystemData.macAddr,
  1837. udid = deviceSystemData.udid,
  1838. isp = deviceSystemData.isp,
  1839. network = deviceSystemData.network,
  1840. app_channel = deviceSystemData.appChannel,
  1841. app_ver = deviceSystemData.appVer,
  1842. trans_id = deviceSystemData.transId,
  1843. unisdk_deviceid = deviceSystemData.deviceId,
  1844. is_emulator = deviceSystemData.isEmulator,
  1845. is_root = deviceSystemData.isRoot,
  1846. account_id = deviceSystemData.accountId,
  1847. old_accountid = deviceSystemData.oldAccountId,
  1848. IMEI = deviceSystemData.imei,
  1849. country_code = deviceSystemData.countryCode,
  1850. oaid = deviceSystemData.oaid,
  1851. engine_ver = deviceSystemData.engineVer,
  1852. }
  1853. }
  1854. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIENT_PARAM_NTF, msgData)
  1855. end
  1856. end
  1857. end
  1858. function UserData:StartEnterGame(skipCreateRole)
  1859. if not skipCreateRole and self.createRole then return end
  1860. if not ManagerContainer.FSMMgr:IsFightingState() then
  1861. -- if self:HasPassedNewbie() then
  1862. if not self.createRole then
  1863. ManagerContainer.LuaGameMgr:EnterBattle(true)
  1864. else
  1865. ManagerContainer.LuaGameMgr:EnterNewbie()
  1866. end
  1867. end
  1868. end
  1869. function UserData:IsInitedOver()
  1870. return self.initedOver
  1871. end
  1872. function UserData:SendGiftCode(code)
  1873. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GIFT_REWARD_REQ, {gift_code = code, uuid = self:GetUserId()})
  1874. end
  1875. function UserData:OnGiftRewardAck(data)
  1876. if data.error ~= Enum.NetErrorCode.ERROR_OK then
  1877. return
  1878. end
  1879. CommonUtil.ACKShowRewardList(data.reward_list)
  1880. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EXCHANGE_REWARD_SUCCESS)
  1881. self:ReportGiftReward(true)
  1882. end
  1883. function UserData:ReportGiftReward(success)
  1884. if not SDKMgr.Instance:IsReportAction() then
  1885. return
  1886. end
  1887. local datas = System.Collections.Generic.Dictionary_object_object()
  1888. datas:Add('event', 'mj_package_code')
  1889. datas:Add('is_achieve', (success and 1 or 0))
  1890. SDKMgr.Instance:ReportAction(datas)
  1891. end
  1892. function UserData:SendQuestionReward()
  1893. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_QUESTION_REWARD_REQ, {})
  1894. end
  1895. function UserData:OnQuestionRewardAck(data)
  1896. if data.error ~= Enum.NetErrorCode.ERROR_OK then return end
  1897. self.data.roleBase.questionReward = 1
  1898. CommonUtil.ACKShowRewardList(data.reward_list)
  1899. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.QUESTION_REWARD_SUCCESS)
  1900. end
  1901. function UserData:OnChangeJobAck(data, isReplace)
  1902. attrsChanged = true
  1903. if data.hero_id == 1 then
  1904. AvatarRTMgr.Instance:RemoveActor(1)
  1905. --ManagerContainer.LuaBattleMgr:SetTeamData(true)
  1906. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_JOB_CHANGE_SUCCESS)
  1907. else
  1908. --ManagerContainer.DataMgr.PartnerData:RefreshPartnerTransfer(data.hero_id)
  1909. end
  1910. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_JOB_CHANGE_SUCCESS, data.hero_id, isReplace)
  1911. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.JOB_CHANGE_SUCCESS, data.hero_id, isReplace)
  1912. ManagerContainer.LuaBattleMgr:SetTeamData(true,true)
  1913. ManagerContainer.LuaBattleMgr:UpdateTeamSkills()
  1914. if data.hero_id == 1 then
  1915. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.USER_HEADPROTRAIT_CHANGED)
  1916. end
  1917. end
  1918. function UserData:SyncRoleDataToSDK()
  1919. local gameRoleInfo = SDKMgr.Instance:GetGameRoleInfo()
  1920. if not gameRoleInfo then
  1921. return nil
  1922. end
  1923. gameRoleInfo.openId = ManagerContainer.LuaGameMgr.openId
  1924. local serverData = ManagerContainer.LuaGameMgr.serverData
  1925. if serverData then
  1926. gameRoleInfo.serverId = serverData.id or 0
  1927. gameRoleInfo.serverName = serverData.name or ''
  1928. else
  1929. gameRoleInfo.serverId = 0
  1930. gameRoleInfo.serverName = ''
  1931. end
  1932. gameRoleInfo.roleId = tostring(self:GetUserId())
  1933. gameRoleInfo.roleName = tostring(self:GetOriUserNickname())
  1934. gameRoleInfo.roleLv = self:GetRoleLv() or 0
  1935. gameRoleInfo.roleCreateTime = self.createRoleTime or ManagerContainer.LuaTimerMgr:CurServerTime()
  1936. gameRoleInfo.roleUpLvTime = self.roleUpLvTime or ManagerContainer.LuaTimerMgr:CurServerTime()
  1937. gameRoleInfo.vipLv = self:GetVipLv() or 0
  1938. gameRoleInfo.gender = self:GetSex() or 0
  1939. gameRoleInfo.jobId = self:GetJobCfgId() or 0
  1940. gameRoleInfo.jobName = self.data.roleBase.roleData.jobName
  1941. local guildId = 0
  1942. local guildName = ""
  1943. local guildDataMgr = ManagerContainer.DataMgr.GuildDataMgr
  1944. if guildDataMgr then
  1945. if guildDataMgr:HasGuild() then
  1946. local briefData = guildDataMgr:GetCurGuildData():GetBriefData()
  1947. guildId = briefData.id
  1948. guildName = briefData.name
  1949. end
  1950. end
  1951. gameRoleInfo.guildId = guildId
  1952. gameRoleInfo.guildName = guildName
  1953. gameRoleInfo.fightPower = self:GetTotalFightPower()
  1954. gameRoleInfo.lastLogoutTime = self.data.roleBase.roleData.lastLogoutTime
  1955. gameRoleInfo.loginTime = self.loginTime or ManagerContainer.LuaTimerMgr:CurServerTime()
  1956. if self.serverStartTime then
  1957. gameRoleInfo.openServerTime = self.serverStartTime / 1000
  1958. end
  1959. return gameRoleInfo
  1960. end
  1961. function UserData:SDKEnterGame()
  1962. self.loginTime = ManagerContainer.LuaTimerMgr:CurServerTime()
  1963. self:SyncRoleDataToSDK()
  1964. SDKMgr.Instance:EnterGame()
  1965. SDKMgr.Instance:ReportLoginRole(0, 0, nil)
  1966. end
  1967. function UserData:SDKExitGame()
  1968. self:SyncRoleDataToSDK()
  1969. SDKMgr.Instance:ExitGame()
  1970. SDKMgr.Instance:ReportLogoutRole(ManagerContainer.LuaTimerMgr:CurServerTime(), nil, nil, nil, 0, 0, nil)
  1971. end
  1972. function UserData:SDKUpdateRoleLv()
  1973. self.roleUpLvTime = ManagerContainer.LuaTimerMgr:CurServerTime()
  1974. self:SyncRoleDataToSDK()
  1975. SDKMgr.Instance:UpdateRoleLv()
  1976. end
  1977. function UserData:GetHeroPetFightPowerByHeroId(id)
  1978. local heroData = self:GetHeroData(id)
  1979. if heroData then
  1980. return heroData.petFightPower or 0
  1981. end
  1982. return 0
  1983. end
  1984. return UserData