UserData.lua 84 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305
  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. LogError("serverStartTime = "..Inspect(self.serverStartTime))
  916. ManagerContainer.LuaTimerMgr:SyncServerTime(data.server_time)
  917. if data.role_base then
  918. self:InitRoleBaseData(data.role_base)
  919. end
  920. if data.role_hero then
  921. ManagerContainer.LuaActorAttributeMgr:SetAllData(data.role_hero.battle_attr_list)--新号 属性
  922. ManagerContainer.DataMgr.PartnerData:InitPartnerData(data.role_hero)
  923. self:GetAllSlotInfos()
  924. end
  925. if data.role_base then
  926. --同步在线奖励时间
  927. ManagerContainer.LuaBattleMgr:SyncOnlineTime(data.role_base)
  928. self:RefreshHeroCurMaxExp()
  929. ManagerContainer.PayMgr:InitRechargeData(data.role_base)
  930. ManagerContainer.DataMgr.BTRechargeRewardDataMgr:InitBtTotalRecharge(data.role_base)
  931. end
  932. if data.role_bag then
  933. ManagerContainer.DataMgr.BagData:InitBagData(data.role_bag)
  934. end
  935. if data.role_wish_box then
  936. ManagerContainer.DataMgr.BagData:RefreshWishSlotData(data.role_wish_box)
  937. end
  938. if data.role_battle then
  939. ManagerContainer.LuaBattleMgr:SetBattleData(data.role_battle,true)
  940. if data.role_battle.evil_info then
  941. ManagerContainer.DataMgr.EvilData:SetEvilData(data.role_battle.evil_info)
  942. end
  943. if data.role_battle.expedition_info then
  944. ManagerContainer.DataMgr.ExpeditionDataMgr:SetData(data.role_battle.expedition_info)
  945. end
  946. ManagerContainer.DataMgr.BattleAccTimeManager:InitData(data.role_battle)
  947. end
  948. if data.role_fashion then
  949. ManagerContainer.DataMgr.FashionData:InitFashionData(data.role_fashion)
  950. end
  951. if data.role_task then
  952. ManagerContainer.DataMgr.TaskDataNew:InitRoleTask(data.role_task)
  953. end
  954. if data.role_competition then
  955. ManagerContainer.DataMgr.CompetitionData:InitCurCompetitionData(data.role_competition)
  956. ManagerContainer.DataMgr.ChatData:Init()
  957. end
  958. if data.role_tower then
  959. ManagerContainer.DataMgr.TowerDataMgr:InitClimbingTowerInfo(data.role_tower)
  960. end
  961. if data.role_bt then
  962. ManagerContainer.DataMgr.BoliShopData:RefreshBoliData(data.role_bt.boli_data)
  963. ManagerContainer.DataMgr.BTRechargeRewardDataMgr:InitData(data.role_bt.base_data)
  964. end
  965. if data.role_skill_equip then
  966. ManagerContainer.DataMgr.SkillEquipData:InitData(data.role_skill_equip)
  967. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_HEAD_DATA_REQ)
  968. end
  969. if data.role_map then
  970. ManagerContainer.DataMgr.WorldBossData:ChangeWorldBossCount(data.role_map.world_boss_count)
  971. end
  972. if data.role_draw then
  973. ManagerContainer.DataMgr.SummonDataMgr:InitSummonMap(data.role_draw)
  974. -- 砸蛋
  975. ManagerContainer.DataMgr.LuckyEggDataMgr:InitLuckyEggMap(data.role_draw)
  976. end
  977. if data.role_daochang100 then
  978. ManagerContainer.DataMgr.HundredDojoDataMgr:InitData(data.role_daochang100)
  979. ManagerContainer.DataMgr.TrunWheelDataMgr:OnDataChangeNtf(data.role_daochang100)
  980. end
  981. if data.role_cross then
  982. ManagerContainer.DataMgr.VoyageDataMgr:RefreshSelfVoyageData(data.role_cross.yuanhangtrial)
  983. end
  984. if data.role_fightpower then
  985. self:InitRoleFightPower(data.role_fightpower)
  986. end
  987. if data.role_red then
  988. self:InitRedState(data.role_red)
  989. end
  990. end)
  991. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_DAO_CHANG100_WHEEL_CHANG_NTF, function(data)
  992. ManagerContainer.DataMgr.TrunWheelDataMgr:OnDataChangeNtf(data)
  993. end)
  994. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CONVER_SKILL_EXP_ACK, function(data)
  995. if data.error == 0 then
  996. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("GetAdvanceSkillExpSucc")
  997. end
  998. end)
  999. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ROLE_BASE_INFO_NTF, function(data)
  1000. --LogError("==============SC_ROLE_BASE_INFO_NTF=================="..Inspect(data))
  1001. local lastData = clone(self.data)
  1002. self.data.roleBase.coin = data.coin
  1003. self.data.roleBase.diamond = data.rmb
  1004. self.data.roleBase.RepressSkillPvpVal = data.repress_skill_pvp_val
  1005. self:InitRoleRes(data.res_list)
  1006. self:InitAdditionalRoleData(data.role_data)
  1007. --self:InitHeroAttrFromBattle()
  1008. self:RefreshHeroCurMaxExp()
  1009. ManagerContainer.RedPointMgr.HeroRPCtr:RoleRedPointNotify()
  1010. self:CompareDataChange(lastData)
  1011. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_UI_REDPOINT_CHANGE)
  1012. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_COIN_AND_DIAMOND)
  1013. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_COIN_AND_JOBEXP)
  1014. if lastData.roleBase.roleData.cruise ~= self.data.roleBase.roleData.cruise then
  1015. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_TREASURE_CRUISE)
  1016. end
  1017. if lastData.roleBase.roleData.heroData.baseLevel ~= self.data.roleBase.roleData.heroData.baseLevel then
  1018. self:SyncActorBaseLevel()
  1019. self:GetNewActorAttrs()
  1020. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_HERO_LVUP_ATTR)
  1021. self:SDKUpdateRoleLv()
  1022. end
  1023. if lastData.roleBase.roleData.heroData.battlePetId ~= self.data.roleBase.roleData.heroData.battlePetId then
  1024. self:CalcPetAttrs()
  1025. end
  1026. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_HERO_UI)
  1027. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.MAIN_UI_ROLE_REDPOINT_NOTICE)
  1028. end)
  1029. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ADD_ATTR_POINT_ACK, function(data)
  1030. if data.error == Enum.NetErrorCode.ERROR_OK then
  1031. if data.hero_id == 1 then
  1032. self:RefreshAddPointAttr()
  1033. ManagerContainer.RedPointMgr.HeroRPCtr:HeroAttrRPNotify()
  1034. else
  1035. ManagerContainer.DataMgr.PartnerData:RefreshAddPointAttr(data.hero_id)
  1036. ManagerContainer.RedPointMgr.HeroRPCtr:PartnerAttrRPNotify(data.hero_id)
  1037. end
  1038. --ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_ATTR_ADD_SUCCESS)
  1039. end
  1040. end)
  1041. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SLOT_DATA_NTF, function(data)
  1042. self:RefreshSlotData(data.slot)
  1043. if self:IsHeroSlot(data.slot.hero_id) then
  1044. self:InitHeroAttrFromBattle()
  1045. ManagerContainer.RedPointMgr.HeroRPCtr:HeroEquipNotify()
  1046. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_EQUIP_REFRESH)
  1047. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.MAIN_UI_ROLE_REDPOINT_NOTICE)
  1048. else
  1049. ManagerContainer.DataMgr.PartnerData:InitPartnerAttrById(data.slot.hero_id)
  1050. --ManagerContainer.RedPointMgr.HeroRPCtr:PartnerRedPointNotifyById(data.slot.hero_id)
  1051. --ManagerContainer.RedPointMgr.HeroRPCtr:HeroEquipNotify()
  1052. ManagerContainer.RedPointMgr.HeroRPCtr:PartnerEquipNotify()
  1053. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_EQUIP_REFRESH)
  1054. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.MAIN_UI_ROLE_REDPOINT_NOTICE)
  1055. end
  1056. end)
  1057. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_EQUIP_SLOT_LEVEL_UP_ACK, function(data)
  1058. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.SLOT_REFINE_LV_UP_SUCCESS, data.error)
  1059. end)
  1060. -- 名字修改
  1061. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_NAME_ACK, self.OnUserNameChanged, self)
  1062. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_RENAME_ACK, self.OnUserNameChanged, self)
  1063. --战力修改
  1064. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_FIGHT_POWER_CHAGNE_NTF, function(data)
  1065. --LogError(Inspect(data))
  1066. if not self.data.roleBase then return end
  1067. local IsSaveSidePower = false
  1068. --保存未上阵的处理 英雄战力 宠物战力(服务器约定 不为空 只同步未上阵的 战斗力) 为空走正常战力修改
  1069. if nil ~= data.data.actor_fightpower then
  1070. for _,v in pairs(data.data.actor_fightpower) do
  1071. if v ~= nil then
  1072. local Id = v.hero_id
  1073. local fightPower = v.hero_fight_power or 0
  1074. local petFightPower = v.pet_fight_power or 0
  1075. if fightPower > 0 then
  1076. self:AddAsideFighterSvrPower(Id,false,fightPower)
  1077. end
  1078. if petFightPower > 0 then
  1079. self:AddAsideFighterSvrPower(Id,true,petFightPower)
  1080. end
  1081. IsSaveSidePower = true
  1082. end
  1083. end
  1084. if IsSaveSidePower then
  1085. --LogError("未上阵SAVE")
  1086. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.SIDEFIGHTPOWER_REFRESH)
  1087. return
  1088. end
  1089. end
  1090. --上阵的战力修改 保存当前战力 弹窗显示
  1091. --LogError("Save 上阵")
  1092. local lastFightPower = self:GetTotalFightPower()
  1093. self:InitRoleFightPower(data.data)
  1094. local newFightPower = self:GetTotalFightPower()
  1095. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.FIGHTPOWER_REFRESH)
  1096. if newFightPower > lastFightPower then
  1097. local data = {startNum = lastFightPower, endNum = newFightPower}
  1098. ManagerContainer.LuaUIMgr:FightPowerAddNotice(data)
  1099. end
  1100. end)
  1101. --寻宝NTF
  1102. -- ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GET_BATTLE_BOX_NTF, function(data)
  1103. -- ManagerContainer.DataMgr.TreasureData:InitTreasureData(data)
  1104. -- end)
  1105. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_RESET_ATTR_POINT_ACK, function(data)
  1106. if data.error == Enum.NetErrorCode.ERROR_OK then
  1107. if data.hero_id == 1 then
  1108. self:RefreshAddPointAttr()
  1109. ManagerContainer.RedPointMgr.HeroRPCtr:HeroAttrRPNotify()
  1110. else
  1111. ManagerContainer.DataMgr.PartnerData:RefreshAddPointAttr(data.hero_id)
  1112. ManagerContainer.RedPointMgr.HeroRPCtr:PartnerAttrRPNotify(data.hero_id)
  1113. end
  1114. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_ATTR_ADD_SUCCESS, true)
  1115. end
  1116. end)
  1117. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HERO_CHANGE_JOB_ACK, function (data)
  1118. if data.error == Enum.NetErrorCode.ERROR_OK then
  1119. self:OnChangeJobAck(data)
  1120. end
  1121. end)
  1122. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HERO_REPLACE_JOB_ACK, function (data)
  1123. if data.error == Enum.NetErrorCode.ERROR_OK then
  1124. self:OnChangeJobAck(data, true)
  1125. end
  1126. end)
  1127. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_HERO_FIGH_POWER_ACK, function(data)
  1128. if data.error == Enum.NetErrorCode.ERROR_OK then
  1129. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.FIGHTPOWER_PARTNER_ACK)
  1130. end
  1131. end)
  1132. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_VIP_CHANGE_NTF, self.OnVipChangedNtf, self)
  1133. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SKILL_SLOT_DATA_NTF,self.OnSkillSlotDataNtf,self)
  1134. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_JOB_SKILL_DATA_NTF,self.OnJobSkillDataNtf,self)
  1135. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ACTIVE_SKILL_ACK,self.OnActiveSkillAck,self)
  1136. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SKILL_LEVEL_UP_ACK, self.OnSkillLevelUpAck,self)
  1137. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SET_SKILL_LIST_ACK, self.OnSetSkillListAck,self)
  1138. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_RESET_SKILL_LEVEL_ACK, self.OnResetSkillLvAck,self)
  1139. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SKILL_RESET_COUNT_NTF, self.OnSkillResetCountNtf,self)
  1140. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CREATE_ROLE_ACK, self.OnCreateRoleAck, self)
  1141. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_ROLE_RED_NTF, function(data)
  1142. self:RefreshRedState(data.red)
  1143. end)
  1144. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_SET_HEAD_ID_ACK, self.OnSetHeadIdAck, self)
  1145. --头像交互功能
  1146. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GET_OTHER_PLAYER_DETAIL_INFO_ACK, self.SCGetOtherPlayerDetailInfoAck, self)
  1147. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_USE_ITEM_ACK, self.OnUseItemAck, self)
  1148. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_CARD_SLOT_CHANGE_NTF, self.CardSlotChangeNtf, self)
  1149. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_STARTUP_INFO_END_NTF, self.StartUpEnd, self)
  1150. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_GIFT_REWARD_ACK, self.OnGiftRewardAck, self)
  1151. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_QUESTION_REWARD_ACK, self.OnQuestionRewardAck, self)
  1152. end
  1153. function UserData:RoleChangeJobAttrSuccess()
  1154. self:InitHeroAttrFromBattle()
  1155. --ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_ATTR_ADD_SUCCESS)
  1156. end
  1157. function UserData:OnCreateRoleAck(data)
  1158. if data.error == 0 then
  1159. self.createRole = true
  1160. local gameRoleInfo = SDKMgr.Instance:GetGameRoleInfo()
  1161. if gameRoleInfo then
  1162. gameRoleInfo.openId = ManagerContainer.LuaGameMgr.openId
  1163. local serverData = ManagerContainer.LuaGameMgr.serverData
  1164. if serverData then
  1165. gameRoleInfo.serverId = serverData.id
  1166. gameRoleInfo.serverName = serverData.name
  1167. end
  1168. gameRoleInfo.roleId = tostring(data.uid) or ''
  1169. gameRoleInfo.roleName = ""
  1170. gameRoleInfo.roleLv = 0
  1171. gameRoleInfo.roleCreateTime = data.create_role_time
  1172. gameRoleInfo.roleUpLvTime = data.create_role_time
  1173. gameRoleInfo.vipLv = 0
  1174. gameRoleInfo.gender = tostring(data.gender) or ''
  1175. gameRoleInfo.jobId = 0
  1176. gameRoleInfo.jobName = ""
  1177. gameRoleInfo.guildId = 0
  1178. gameRoleInfo.guildName = ""
  1179. gameRoleInfo.fightPower = 0
  1180. end
  1181. SDKMgr.Instance:CreateRole()
  1182. SDKMgr.Instance:ReportCreateRole()
  1183. end
  1184. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_CREATE_ROLE_FAILED,data.error)
  1185. end
  1186. function UserData:CardSlotChangeNtf(data)
  1187. ManagerContainer.RedPointMgr.HeroRPCtr:RoleCardSlotRPNotify(data.slot_list)
  1188. end
  1189. function UserData:InitRedState(data)
  1190. self.data.mailRedState = data.is_unread_mail
  1191. end
  1192. function UserData:HasPassedNewbie()
  1193. -- return CommonUtil.And(self:GetGuideId(),1) == 1
  1194. return true
  1195. end
  1196. function UserData:RefreshRedState(data)
  1197. self.data.mailRedState = data.is_unread_mail
  1198. end
  1199. function UserData:CompareDataChange(lastData)
  1200. local changedRes = {}
  1201. if lastData.roleBase.coin ~= self.data.roleBase.coin then
  1202. changedRes[Enum.ItemIds.Coin] = (self.data.roleBase.coin - lastData.roleBase.coin)
  1203. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.COIN_CHANGED)
  1204. end
  1205. if lastData.roleBase.diamond ~= self.data.roleBase.diamond then
  1206. changedRes[Enum.ItemIds.Diamond] = (self.data.roleBase.diamond - lastData.roleBase.diamond)
  1207. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.DIAMOND_CHANGED)
  1208. end
  1209. if lastData.roleBase.roleData.cruise ~= self.data.roleBase.roleData.cruise then
  1210. changedRes[Enum.ItemIds.SkillExp] = (self.data.roleBase.roleData.cruise - lastData.roleBase.roleData.cruise)
  1211. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_CRUISE_CHANGED)
  1212. end
  1213. if lastData.roleBase.roleData.heroData.baseLevel ~= self.data.roleBase.roleData.heroData.baseLevel then
  1214. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_LV_CHANGED, self:GetId())
  1215. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_LV_CHANGED)
  1216. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_EXP_CHANGED)
  1217. --等级改变 同步
  1218. ManagerContainer.LuaBattleMgr:SetTeamData(true,false)
  1219. elseif lastData.roleBase.roleData.baseExp ~= self.data.roleBase.roleData.baseExp then
  1220. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_EXP_CHANGED)
  1221. end
  1222. if lastData.roleBase.roleData.jobLevel ~= self.data.roleBase.roleData.jobLevel then
  1223. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.JOB_LV_CHANGED)
  1224. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.JOB_EXP_CHANGED)
  1225. elseif lastData.roleBase.roleData.jobExp ~= self.data.roleBase.roleData.jobExp then
  1226. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.JOB_EXP_CHANGED)
  1227. end
  1228. local lastResMap = lastData.roleBase.resMap
  1229. local curResMap = self.data.roleBase.resMap
  1230. for k,v in pairs(curResMap) do
  1231. local lastV = lastResMap[k]
  1232. if lastV ~= v then
  1233. changedRes[k] = v - (lastV or 0)
  1234. end
  1235. lastResMap[k] = nil
  1236. end
  1237. for k, v in pairs(lastResMap) do
  1238. changedRes[k] = -v
  1239. end
  1240. for key, value in pairs(changedRes) do
  1241. if key == Enum.RoleResType.HeroSpirit then
  1242. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_HERO_SPIRIT_CHANGED, value)
  1243. elseif key == Enum.ItemType.EvilExp then
  1244. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_ROLE_EVIL_EXP_CHANGED)
  1245. elseif key == Enum.ItemType.AdvanceSkillExp then
  1246. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_ADVANCESKILLEXP_CHANGED)
  1247. elseif key == Enum.ItemType.ROCoin then
  1248. --LogError("=================ROCOIN_CHANGED=========")
  1249. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROCOIN_CHANGED)
  1250. elseif key == Enum.ItemType.BoliShopExp then
  1251. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROBOLISHOP_EXP_CHANGE)
  1252. end
  1253. end
  1254. if not CommonUtil.TableIsEmpty(changedRes) then
  1255. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.CURRENY_CHANGED, changedRes)
  1256. end
  1257. end
  1258. function UserData:GetCardBuffs(index)
  1259. local list = {}
  1260. local slots = self:GetCurSlotInfos(index)
  1261. if slots ~= nil then
  1262. for i = 1,#slots do
  1263. if slots[i].equip_id > 0 then
  1264. local cardList = slots[i].card_id_list
  1265. for _,v in pairs(cardList) do
  1266. if v > 0 then
  1267. local cardData = ManagerContainer.CfgMgr:GetCardDataById(v)
  1268. if cardData.BUFF ~= nil then
  1269. for _,v1 in pairs(cardData.BUFF) do
  1270. list[#list + 1] = v1
  1271. end
  1272. end
  1273. end
  1274. end
  1275. end
  1276. end
  1277. end
  1278. return list
  1279. end
  1280. function UserData:GetTeamData(ignore)
  1281. local battleIds = {}
  1282. local petId = self.data.roleBase.roleData.heroData.battlePetId
  1283. local petData = ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(petId)
  1284. local data = {
  1285. uid = self.data.roleBase.roleData.heroData.id,
  1286. id = self.data.roleBase.roleCfgId,
  1287. jobId = self.data.roleBase.roleData.heroData.configId,
  1288. lv = self.data.roleBase.roleData.heroData.baseLevel,
  1289. headFrameId = self.data.roleBase.roleData.headFrameId,
  1290. role = false,
  1291. mainRole = true,
  1292. -- skills = ManagerContainer.DataMgr.SkillsData:GetUsedSkills(),
  1293. skills = self.data.roleBase.roleData.heroData.skillData:GetUsedSkills(),
  1294. buffs = self:GetCardBuffs(1),
  1295. fashion = self:GetViewData(),
  1296. petId = petId > 0 and petId + Enum.ActorUidField.Pet or 0,
  1297. petBaseId = petData and petData.cfgId or 0,
  1298. Name = self:GetUserNickname()
  1299. }
  1300. CommonUtil.ReplaceBattleSkillBySkillEquip(self.data.roleBase.roleData.heroData, data.skills)
  1301. battleIds[#battleIds + 1] = data
  1302. local list = ManagerContainer.DataMgr.PartnerData:GetBattlePartnerDatas(attrsChanged, ignore)
  1303. if list then
  1304. for _,v in pairs(list) do
  1305. battleIds[#battleIds + 1] = v
  1306. end
  1307. end
  1308. --lastTeamEquipAttrs = lastEquipAttrs
  1309. --lastTeamCardAttrs = lastCardAttrs
  1310. attrsChanged = false
  1311. self:SyncFashionToActorData()
  1312. return battleIds
  1313. end
  1314. function UserData:GetHeroActorParam()
  1315. local actors = System.Array.CreateInstance(Enum.TypeInfo.ActorData, 1)
  1316. actors[0] = ManagerContainer.LuaActorDataMgr:GetActorData(true,0)
  1317. return actors
  1318. end
  1319. function UserData:GetSuitNum(slots, slotType)
  1320. if slots == nil then return 0 end
  1321. if slots[slotType].equip_id == 0 then return 0 end
  1322. local suits = {}
  1323. local equipData = ManagerContainer.CfgMgr:GetEquipById(slots[slotType].equip_id)
  1324. if not equipData then
  1325. return
  1326. end
  1327. local suitNum = 0
  1328. if equipData.Suit == 0 then
  1329. return suitNum, suits
  1330. end
  1331. local suitId = ManagerContainer.CfgMgr:GetEquipSuitById(equipData.Suit)
  1332. for i = 1, #slots do
  1333. if slots[i].equip_id > 0 then
  1334. local equipData1 = ManagerContainer.CfgMgr:GetEquipById(slots[i].equip_id)
  1335. local suitId1 = ManagerContainer.CfgMgr:GetEquipSuitById(equipData1.Suit)
  1336. if suitId == suitId1 or equipData1.EquipLevel >= equipData.EquipLevel then
  1337. suitNum = suitNum + 1
  1338. suits[equipData1.Type] = equipData1.Name
  1339. end
  1340. end
  1341. end
  1342. return suitNum, suits
  1343. end
  1344. function UserData:GetMinRefineLevel(slots)
  1345. if slots == nil then return 0 end
  1346. local minLv = 100
  1347. for i = 1, #slots do
  1348. if slots[i].level < minLv then
  1349. minLv = slots[i].level
  1350. end
  1351. end
  1352. if minLv == 100 then
  1353. return 0
  1354. end
  1355. if minLv >= 3 then
  1356. return minLv
  1357. end
  1358. return 0
  1359. end
  1360. function UserData:GetSlotsEquipAttr(slots)
  1361. if slots == nil then return nil end
  1362. local baseAttrs = {}
  1363. for _,v in pairs(Enum.HeroAttrType) do
  1364. baseAttrs[v] = 0
  1365. end
  1366. local suitIds = {}
  1367. local suitCounts = {}
  1368. local refineSuitLv = self:GetMinRefineLevel(slots)
  1369. for i = 1,#slots do
  1370. if slots[i].equip_id > 0 then
  1371. local suitNum = ManagerContainer.DataMgr.UserData:GetSuitNum(slots, i)
  1372. local equipCfgData = ManagerContainer.CfgMgr:GetEquipById(slots[i].equip_id)
  1373. local refineData = ManagerContainer.CfgMgr:GetEquipRefineDataByLv(slots[i].level)
  1374. for k,v in pairs(Enum.HeroAttrType) do
  1375. if equipCfgData[k] and equipCfgData[k] ~= 0 then
  1376. if v < Enum.HeroAttrType.STR_Percent then
  1377. local refineAdd = equipCfgData[k]*(refineData ~= nil and ((refineData.Result + 100)*0.01) or 1)
  1378. baseAttrs[Enum.HeroAttrType[k]] = baseAttrs[Enum.HeroAttrType[k]] + refineAdd
  1379. end
  1380. end
  1381. if refineSuitLv > 0 then
  1382. for j = refineSuitLv, 1, -1 do
  1383. local data = ManagerContainer.CfgMgr:GetEquipRefineDataByLv(j)
  1384. local refineEff = data["Suit"]
  1385. if refineEff ~= nil and #refineEff > 0 and refineEff[1] == Enum.HeroAttrType[k] then
  1386. if v >= Enum.HeroAttrType.STR_Percent then
  1387. baseAttrs[Enum.HeroAttrType[k]] = baseAttrs[Enum.HeroAttrType[k]] + refineEff[1]
  1388. end
  1389. end
  1390. end
  1391. end
  1392. end
  1393. if equipCfgData.Suit > 0 and not CommonUtil.EleInTable(equipCfgData.Suit, suitIds) then
  1394. suitIds[#suitIds + 1] = equipCfgData.Suit
  1395. suitCounts[equipCfgData.Suit] = math.floor(suitNum/2)
  1396. end
  1397. end
  1398. end
  1399. for i = 1,#suitIds do
  1400. local suitCfgData = ManagerContainer.CfgMgr:GetEquipSuitById(suitIds[i])
  1401. for j = 1, suitCounts[suitIds[i]] do
  1402. if suitCfgData["Suit"..j] ~= nil then
  1403. for k, v in pairs(suitCfgData["Suit"..j]) do
  1404. if type(v) == "table" then
  1405. if baseAttrs[v[1]] == nil then
  1406. baseAttrs[v[1]] = v[2]
  1407. else
  1408. baseAttrs[v[1]] = baseAttrs[v[1]] + v[2]
  1409. end
  1410. else
  1411. if baseAttrs[suitCfgData["Suit"..j][1]] == nil then
  1412. baseAttrs[suitCfgData["Suit"..j][1]] = suitCfgData["Suit"..j][2]
  1413. else
  1414. baseAttrs[suitCfgData["Suit"..j][1]] = baseAttrs[suitCfgData["Suit"..j][1]] + suitCfgData["Suit"..j][2]
  1415. end
  1416. break
  1417. end
  1418. end
  1419. end
  1420. end
  1421. end
  1422. for k, v in pairs(Enum.HeroAttrType) do
  1423. if v >= Enum.HeroAttrType.STR_Percent then
  1424. baseAttrs[v] = baseAttrs[v]*0.0001
  1425. end
  1426. end
  1427. for k, v in pairs(Enum.HeroAttrType) do
  1428. if v < Enum.HeroAttrType.STR_Percent then
  1429. baseAttrs[v] = baseAttrs[v]*(1 + baseAttrs[v + 30])
  1430. end
  1431. end
  1432. for k, v in pairs(Enum.HeroAttrType) do
  1433. if v >= Enum.HeroAttrType.STR_Percent then
  1434. baseAttrs[v] = 0
  1435. end
  1436. end
  1437. return baseAttrs
  1438. end
  1439. function UserData:GetSlotsCardAttr(slots)
  1440. if slots == nil then return nil end
  1441. local baseAttrs = {}
  1442. for _,v in pairs(Enum.HeroAttrType) do
  1443. baseAttrs[v] = 0
  1444. end
  1445. for i = 1,#slots do
  1446. --if slots[i].equip_id > 0 then
  1447. local cardList = slots[i].card_id_list
  1448. for _,v in pairs(cardList) do
  1449. if v > 0 then
  1450. local cardData = ManagerContainer.CfgMgr:GetCardDataById(v)
  1451. for _,v1 in pairs(CommonUtil.DeserializeCfgItemList(cardData.Attribute1)) do
  1452. if v1[1] < Enum.HeroAttrType.STR_Percent then
  1453. baseAttrs[v1[1]] = baseAttrs[v1[1]] + v1[2]
  1454. else
  1455. baseAttrs[v1[1]] = baseAttrs[v1[1]] + v1[2]*0.0001
  1456. end
  1457. end
  1458. end
  1459. end
  1460. --end
  1461. end
  1462. return baseAttrs
  1463. end
  1464. function UserData:Clear()
  1465. self.data = {}
  1466. self:ClearFighterSvrPowers()
  1467. baseAttrs = nil
  1468. lastEquipAttrs = nil
  1469. lastCardAttrs = nil
  1470. lastFashionAttrs = nil
  1471. lastTeamEquipAttrs = nil
  1472. lastTeamCardAttrs = nil
  1473. lastPointAttrs = nil
  1474. lastBaseAttrs = nil
  1475. lastSkillAttrs = nil
  1476. lastPetAttrs = nil
  1477. lastHeadFrameAttrs = nil
  1478. lastKeepSakeAttrs = nil
  1479. self.initedOver = false
  1480. --self:UnRegisterNetEvents()
  1481. self.createRole = nil
  1482. self.createRoleTime = nil
  1483. self.roleUpLvTime = nil
  1484. self.loginTime = nil
  1485. end
  1486. function UserData:Destroy()
  1487. if self.Clear then
  1488. self:Clear()
  1489. self:ClearFighterSvrPowers()
  1490. end
  1491. self:UnRegisterNetEvents()
  1492. end
  1493. function UserData:UnRegisterNetEvents()
  1494. --ManagerContainer.NetManager:UnRegisterPbNameCallback("SC_CREATE_ROLE_ACK")
  1495. --ManagerContainer.NetManager:UnRegisterPbNameCallback("SC_STARTUP_INFO_NTF")
  1496. end
  1497. function UserData:GetCurrency(type)
  1498. if type == Enum.ItemType.Coin then
  1499. return self.data.roleBase.coin
  1500. end
  1501. if type == Enum.ItemType.Diamond then
  1502. return self.data.roleBase.diamond
  1503. end
  1504. if type == Enum.ItemType.RoleBaseExp then
  1505. return self.data.roleBase.roleData.baseExp
  1506. end
  1507. if type == Enum.ItemType.RoleJobExp then
  1508. return self.data.roleBase.roleData.jobExp
  1509. end
  1510. if type == Enum.ItemType.ParterExp then
  1511. return self.data.roleBase.roleData.heroExp
  1512. end
  1513. if type == Enum.ItemType.SkillExp then
  1514. return self.data.roleBase.roleData.cruise
  1515. end
  1516. if type == Enum.ItemType.AdvanceSkillExp then
  1517. return self.data.roleBase.resMap[Enum.ItemType.AdvanceSkillExp] or 0
  1518. end
  1519. return self:GetResById(type)
  1520. end
  1521. function UserData:OnSetHeadIdAck(data)
  1522. if not data then return end
  1523. local headPortraitId = data.head_id
  1524. local cfgData = ManagerContainer.CfgMgr:GetHeadPortraitDataById(headPortraitId)
  1525. if not cfgData then return end
  1526. self:InitHeadPortrait(headPortraitId)
  1527. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.USER_HEADPROTRAIT_CHANGED)
  1528. end
  1529. function UserData:OnUserNameChanged(data)
  1530. if data.error ~= 0 then return end
  1531. if not data.name or data.name == '' then return end
  1532. self.data.roleBase.nickname = data.name
  1533. local mainActor = ManagerContainer.LuaActorDataMgr:GetHeroActorData(1)
  1534. if mainActor ~= nil then
  1535. mainActor.Name = ManagerContainer.DataMgr.UserData:GetUserNickname()
  1536. end
  1537. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.NICK_NAME_CREATED)
  1538. end
  1539. --增加对应压制mark
  1540. function UserData:SetActorPveMark(ActorId,actor)
  1541. --LogError(tostring(ActorId))
  1542. local skillData = self:GetSkillData(ActorId)
  1543. if nil == skillData then
  1544. return
  1545. end
  1546. local currNerveLv = skillData:GetCurrNerveLv()
  1547. local allCfgDatas = ManagerContainer.CfgMgr:GetAllSkillSuitNewCfg()
  1548. if currNerveLv > 0 then --设置压制ID
  1549. for k, v in pairs(allCfgDatas) do
  1550. if v.Id == currNerveLv then
  1551. local mark = GvGMark.New(v.buffid, 1)
  1552. actor:SetPveMark(mark)
  1553. --LogError("添加压制markid"..tostring(v.buffid))
  1554. end
  1555. end
  1556. end
  1557. end
  1558. function UserData:OnVipChangedNtf(data)
  1559. -- LogError('[Wboy] OnVipChangedNtf ' .. Inspect(data))
  1560. if ManagerContainer.NetManager:IsErrorData(data) then
  1561. return
  1562. end
  1563. local exp = self.data.roleBase.resMap[Enum.ItemType.VipExp] or 0
  1564. local lv = self.data.roleBase.vipLv
  1565. local newExp = data.vip_exp
  1566. local newLv = data.vip_level
  1567. self.data.roleBase.resMap[Enum.ItemType.VipExp] = newExp
  1568. self.data.roleBase.vipLv = newLv
  1569. if newLv ~= lv then
  1570. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.VIP_LV_CHANGED, lv, newLv)
  1571. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.UI_VIP_FUNCLOCK_OPEN_NTF, Enum.TaskType.VIP_Level)
  1572. end
  1573. if newExp ~= exp then
  1574. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.VIP_EXP_CHANGED, newLv, exp, newExp)
  1575. end
  1576. end
  1577. function UserData:GetHeroLv(heroId)
  1578. if self:IsLeaderHero(heroId) then
  1579. return self:GetRoleLv()
  1580. else
  1581. return ManagerContainer.DataMgr.PartnerData:GetHeroLv(heroId)
  1582. end
  1583. end
  1584. --- 获得英雄的jobCfgId
  1585. ---@return integer 主角是JobCfgId, 伙伴是PartnerCfgId
  1586. function UserData:GetHeroJobCfgId(heroId)
  1587. if self:IsLeaderHero(heroId) then
  1588. return self:GetJobCfgId()
  1589. else
  1590. return ManagerContainer.DataMgr.PartnerData:GetHeroCfgId(heroId)
  1591. end
  1592. end
  1593. ----------------------------- 未上阵的 战斗力数据
  1594. function UserData:GetAOrCreatesideFighterSvrPower()
  1595. if nil == self.AsideFighterPower then
  1596. self.AsideFighterPower = {}
  1597. end
  1598. return self.AsideFighterPower
  1599. end
  1600. function UserData:ClearFighterSvrPowers()
  1601. self.AsideFighterPower = {}
  1602. end
  1603. function UserData:AddAsideFighterSvrPower(Id,IsPet,Power)
  1604. --LogError("AddAsideFighterPower"..tostring(Id))
  1605. local tbFigherPower = self:GetAOrCreatesideFighterSvrPower()
  1606. for k,v in pairs(tbFigherPower) do
  1607. if v.Id == Id and v.IsPet == IsPet then
  1608. v.Power = Power
  1609. return
  1610. end
  1611. end
  1612. local PowerInfo = {Id = Id,IsPet = IsPet,Power = Power}
  1613. table.insert( tbFigherPower , PowerInfo)
  1614. end
  1615. function UserData:RemoveAsideFighterSvrPower(Id,IsPet)
  1616. local NewTb = {}
  1617. local tbFigherPower = self:GetAOrCreatesideFighterSvrPower()
  1618. for k,v in pairs(tbFigherPower) do
  1619. local IsInsert = true
  1620. if v.Id == Id and v.IsPet == IsPet then
  1621. IsInsert = false
  1622. end
  1623. if IsInsert then
  1624. table.insert(NewTb,v)
  1625. end
  1626. end
  1627. self.AsideFighterPower = NewTb
  1628. end
  1629. function UserData:GetAsideFighterSvrPower(Id,IsPet)
  1630. local tbFigherPower = self:GetAOrCreatesideFighterSvrPower()
  1631. for k,v in pairs(tbFigherPower) do
  1632. if v.Id == Id and v.IsPet == IsPet then
  1633. return v.Power
  1634. end
  1635. end
  1636. return -1 --服务器未同步计算
  1637. end
  1638. ----------------------------
  1639. ------------------------------- 技能相关 Start -------------------------------
  1640. function UserData:GetSkillData(heroId)
  1641. local skillData = nil
  1642. local heroData = nil
  1643. if self:IsLeaderHero(heroId) then
  1644. heroData = self.data.roleBase.roleData.heroData
  1645. skillData = heroData.skillData
  1646. else
  1647. heroData = ManagerContainer.DataMgr.PartnerData:GetPartnerDataByUniqueId(heroId)
  1648. skillData = heroData and heroData.skillData or nil
  1649. end
  1650. return skillData, heroData
  1651. end
  1652. function UserData:GetAllUnlockRoleSkillPress()
  1653. local maxPress = 0
  1654. local skillData = self.data.roleBase.roleData.heroData.skillData
  1655. if skillData then
  1656. maxPress = maxPress + skillData:GetMaxPress()
  1657. end
  1658. local allPartners = ManagerContainer.DataMgr.PartnerData:GetPartnerDatas()
  1659. for k, v in pairs(allPartners) do
  1660. if v.skillData then
  1661. maxPress = maxPress + v.skillData:GetMaxPress()
  1662. end
  1663. end
  1664. return maxPress
  1665. end
  1666. function UserData:GetCurrRoleSkillPress()
  1667. return self.data.roleBase.RepressSkillPvpVal or 0
  1668. end
  1669. function UserData:OnJobSkillDataNtf(data)
  1670. if ManagerContainer.NetManager:IsErrorData(data) then return end
  1671. local heroId = data.hero_id
  1672. local skillData, heroData = self:GetSkillData(heroId)
  1673. if skillData then
  1674. local isSlotChanged, newSkills, upLvSkills, downLvSkills = skillData:OnJobSkillDataChange(data)
  1675. local isRefeSelectId = false
  1676. if newSkills and #newSkills > 0 then
  1677. -- 获得新技能
  1678. ManagerContainer.NewGotTipsMgr:AddShowData(1, newSkills)
  1679. isRefeSelectId = true
  1680. self:ReportStudySkill(heroId, newSkills, true)
  1681. end
  1682. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_SKILL_CHANGED, heroId, newSkills, upLvSkills, downLvSkills,isRefeSelectId)
  1683. if isSlotChanged then
  1684. self:RefreshActorDataSkill(heroData, skillData)
  1685. end
  1686. else
  1687. LogError("[Wboy] SC_JOB_SKILL_DATA_NTF Hero SkillData is not Find, heroId = " .. tostring(heroId) .. "\n" .. Inspect(data))
  1688. end
  1689. local isChanged
  1690. if self:IsLeaderHero(heroId) then
  1691. isChanged = self:CalcSkillAttrs()
  1692. else
  1693. isChanged = ManagerContainer.DataMgr.PartnerData:OnJobSkillDataChanged(heroId)
  1694. end
  1695. if isChanged then
  1696. --ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_ATTR_ADD_SUCCESS)
  1697. end
  1698. end
  1699. function UserData:ReportStudySkill(heroId, newSkills, success)
  1700. if not SDKMgr.Instance:IsReportAction() then
  1701. return
  1702. end
  1703. if self:IsLeaderHero(heroId) then
  1704. for i = 1, #newSkills do
  1705. local datas = System.Collections.Generic.Dictionary_object_object()
  1706. datas:Add('event', 'mj_roleskill')
  1707. datas:Add('num', newSkills[i].skillId)
  1708. SDKMgr.Instance:ReportAction(datas)
  1709. end
  1710. else
  1711. local datas = System.Collections.Generic.Dictionary_object_object()
  1712. datas:Add('event', 'mj_heroskill')
  1713. datas:Add('is_achieve', (success and 1 or 0))
  1714. SDKMgr.Instance:ReportAction(datas)
  1715. end
  1716. end
  1717. function UserData:OnSkillSlotDataNtf(data)
  1718. if ManagerContainer.NetManager:IsErrorData(data) then return end
  1719. local heroId = data.hero_id
  1720. local skillData, heroData = self:GetSkillData(heroId)
  1721. if skillData then
  1722. skillData:OnSkillSlotDataChange(data)
  1723. self:RefreshActorDataSkill(heroData, skillData)
  1724. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_SKILL_SLOT_CHANGED, heroId)
  1725. else
  1726. LogError("[Wboy] SC_SET_SKILL_LIST_ACK Hero SkillData is not Find, heroId = " .. tostring(heroId) .. "\n" .. Inspect(data))
  1727. end
  1728. end
  1729. function UserData:RefreshActorDataSkill(heroData, skillData)
  1730. local heroId = heroData.id
  1731. local heroActorData = nil
  1732. local isBattle = false
  1733. if self:IsLeaderHero(heroId) then
  1734. heroActorData = ManagerContainer.LuaActorDataMgr:GetActorData(true, 0)
  1735. isBattle = true
  1736. else
  1737. if heroData.owned then
  1738. heroActorData = ManagerContainer.LuaActorDataMgr:GetActorData(false, heroData.configId)
  1739. end
  1740. isBattle = heroData.isBattle
  1741. end
  1742. if heroActorData then
  1743. if isBattle then
  1744. local usedSkills = skillData:GetUsedSkills() or {}
  1745. CommonUtil.ReplaceBattleSkillBySkillEquip(heroData, usedSkills)
  1746. ManagerContainer.LuaGameMgr:UpdateTeamSkills({{ uid = heroData.id, skills = usedSkills }})
  1747. else
  1748. local usedSkillParams = skillData:GetUsedSkillParams()
  1749. CommonUtil.ReplaceBattleSkillBySkillEquip(heroData, usedSkillParams)
  1750. heroActorData:RefreshSkills(usedSkillParams)
  1751. end
  1752. end
  1753. end
  1754. function UserData:OnActiveSkillAck(data)
  1755. ManagerContainer.LuaBattleMgr:SetTeamData(true,true)
  1756. -- if ManagerContainer.NetManager:IsErrorData(data) then
  1757. -- LogError("[Wboy] SC_ACTIVE_SKILL_ACK is Error " .. Inspect(data))
  1758. -- end
  1759. end
  1760. function UserData:OnSkillLevelUpAck(data)
  1761. -- if ManagerContainer.NetManager:IsErrorData(data) then
  1762. -- LogError("[Wboy] SC_SKILL_LEVEL_UP_ACK is Error " .. Inspect(data))
  1763. -- end
  1764. end
  1765. function UserData:OnSetSkillListAck(data)
  1766. ManagerContainer.LuaBattleMgr:SetTeamData(true,true)
  1767. -- if ManagerContainer.NetManager:IsErrorData(data) then
  1768. -- LogError("[Wboy] SC_SET_SKILL_LIST_ACK is Error " .. Inspect(data))
  1769. -- end
  1770. end
  1771. function UserData:OnResetSkillLvAck(data)
  1772. if ManagerContainer.NetManager:IsErrorData(data) then return end
  1773. ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('SkillResetDscTxt3')
  1774. end
  1775. function UserData:OnSkillResetCountNtf(data)
  1776. if ManagerContainer.NetManager:IsErrorData(data) then return end
  1777. local lastCount = self:GetSkillResetCount()
  1778. local count = data.reset_count or -1
  1779. if lastCount == count then return end
  1780. self.data.roleBase.roleData.skillResetCount = count
  1781. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_SKILL_RESET_LV_COUNT_CHANGED)
  1782. end
  1783. function UserData:IsLeaderHero(heroId)
  1784. return heroId == 1
  1785. end
  1786. ------------------------------- 技能相关 End -------------------------------
  1787. --开启了好友的信息界面
  1788. function UserData:SCGetOtherPlayerDetailInfoAck(_data, isCross)
  1789. if not isCross then isCross = false end
  1790. _data._targetTag = 1;
  1791. _data._isCross = isCross;
  1792. ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIRoleMessage, _data) --打开头像交互界面,显示好友的信息
  1793. end
  1794. --使用item的返回
  1795. function UserData:OnUseItemAck(_data)
  1796. if ManagerContainer.NetManager:IsErrorData(_data) then
  1797. -- LogError("使用商品消息错误返回,错误码:" .. tostring(_data.error));
  1798. return
  1799. end
  1800. CommonUtil.ACKShowRewardList(_data.item_list)
  1801. end
  1802. function UserData:StartUpEnd()
  1803. if not self.initedOver then
  1804. self.initedOver = true
  1805. ManagerContainer.LuaActorAttributeMgr:SendAttrReq()
  1806. ManagerContainer.DataMgr.PetDataMgr:InitPetRelationAttrs()
  1807. ManagerContainer.LuaBattleMgr:SetTeamData(true,true)
  1808. ManagerContainer.LuaGameMgr:LoadGameSpeed()
  1809. ManagerContainer.RedPointMgr.HeroRPCtr:RoleRedPointNotify()
  1810. ManagerContainer.RedPointMgr.HeroRPCtr:SkillUnlockNotify()
  1811. ManagerContainer.DataMgr.FriendDataMgr:RequestAllData()
  1812. ManagerContainer.DataMgr.MailData:QueryMailData()
  1813. ManagerContainer.DataMgr.GuildDataMgr:SendGuildLoginReq()
  1814. ManagerContainer.DataMgr.CollectionBookData:QueryCardHandBook()
  1815. ManagerContainer.DataMgr.KeepSakeBookData:QueryKeepSakeHandBook()
  1816. ManagerContainer.DataMgr.SignData:QuerySignUpInfoReq()
  1817. ManagerContainer.PayMgr:SendStartUpPayComplete()
  1818. ManagerContainer.DataMgr.RankActivitiesMgr:QueryRankActivitiesData(true)
  1819. ManagerContainer.DataMgr.RuneShopDataMgr:QueryAirShipActivityData()
  1820. -- ManagerContainer.DataMgr.RuneShopDataMgr:SendShopInfoReq(Enum.RuneShopType.MonthCard,nil)
  1821. ManagerContainer.LuaUIMgr:CloseInputMask()
  1822. --重连后刷新顶部资源
  1823. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.COIN_CHANGED)
  1824. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.DIAMOND_CHANGED)
  1825. self:StartEnterGame()
  1826. self:SDKEnterGame()
  1827. -- 给服务器发送数据,用于Log
  1828. local deviceSystemData = SDKMgr.Instance:GetDeviceSystemData()
  1829. if deviceSystemData then
  1830. local msgData = {
  1831. client_info = {
  1832. device_model = deviceSystemData.deviceModel,
  1833. device_height = deviceSystemData.deviceHeight,
  1834. device_width = deviceSystemData.deviceWidth,
  1835. os_name = deviceSystemData.osName,
  1836. os_ver = deviceSystemData.osVer,
  1837. mac_addr = deviceSystemData.macAddr,
  1838. udid = deviceSystemData.udid,
  1839. isp = deviceSystemData.isp,
  1840. network = deviceSystemData.network,
  1841. app_channel = deviceSystemData.appChannel,
  1842. app_ver = deviceSystemData.appVer,
  1843. trans_id = deviceSystemData.transId,
  1844. unisdk_deviceid = deviceSystemData.deviceId,
  1845. is_emulator = deviceSystemData.isEmulator,
  1846. is_root = deviceSystemData.isRoot,
  1847. account_id = deviceSystemData.accountId,
  1848. old_accountid = deviceSystemData.oldAccountId,
  1849. IMEI = deviceSystemData.imei,
  1850. country_code = deviceSystemData.countryCode,
  1851. oaid = deviceSystemData.oaid,
  1852. engine_ver = deviceSystemData.engineVer,
  1853. }
  1854. }
  1855. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_CLIENT_PARAM_NTF, msgData)
  1856. end
  1857. end
  1858. end
  1859. function UserData:StartEnterGame(skipCreateRole)
  1860. if not skipCreateRole and self.createRole then return end
  1861. if not ManagerContainer.FSMMgr:IsFightingState() then
  1862. -- if self:HasPassedNewbie() then
  1863. if not self.createRole then
  1864. ManagerContainer.LuaGameMgr:EnterBattle(true)
  1865. else
  1866. ManagerContainer.LuaGameMgr:EnterNewbie()
  1867. end
  1868. end
  1869. end
  1870. function UserData:IsInitedOver()
  1871. return self.initedOver
  1872. end
  1873. function UserData:SendGiftCode(code)
  1874. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_GIFT_REWARD_REQ, {gift_code = code, uuid = self:GetUserId()})
  1875. end
  1876. function UserData:OnGiftRewardAck(data)
  1877. if data.error ~= Enum.NetErrorCode.ERROR_OK then
  1878. return
  1879. end
  1880. CommonUtil.ACKShowRewardList(data.reward_list)
  1881. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EXCHANGE_REWARD_SUCCESS)
  1882. self:ReportGiftReward(true)
  1883. end
  1884. function UserData:ReportGiftReward(success)
  1885. if not SDKMgr.Instance:IsReportAction() then
  1886. return
  1887. end
  1888. local datas = System.Collections.Generic.Dictionary_object_object()
  1889. datas:Add('event', 'mj_package_code')
  1890. datas:Add('is_achieve', (success and 1 or 0))
  1891. SDKMgr.Instance:ReportAction(datas)
  1892. end
  1893. function UserData:SendQuestionReward()
  1894. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_QUESTION_REWARD_REQ, {})
  1895. end
  1896. function UserData:OnQuestionRewardAck(data)
  1897. if data.error ~= Enum.NetErrorCode.ERROR_OK then return end
  1898. self.data.roleBase.questionReward = 1
  1899. CommonUtil.ACKShowRewardList(data.reward_list)
  1900. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.QUESTION_REWARD_SUCCESS)
  1901. end
  1902. function UserData:OnChangeJobAck(data, isReplace)
  1903. attrsChanged = true
  1904. if data.hero_id == 1 then
  1905. AvatarRTMgr.Instance:RemoveActor(1)
  1906. --ManagerContainer.LuaBattleMgr:SetTeamData(true)
  1907. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.ROLE_JOB_CHANGE_SUCCESS)
  1908. else
  1909. --ManagerContainer.DataMgr.PartnerData:RefreshPartnerTransfer(data.hero_id)
  1910. end
  1911. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.HERO_JOB_CHANGE_SUCCESS, data.hero_id, isReplace)
  1912. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.JOB_CHANGE_SUCCESS, data.hero_id, isReplace)
  1913. ManagerContainer.LuaBattleMgr:SetTeamData(true,true)
  1914. ManagerContainer.LuaBattleMgr:UpdateTeamSkills()
  1915. if data.hero_id == 1 then
  1916. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.USER_HEADPROTRAIT_CHANGED)
  1917. end
  1918. end
  1919. function UserData:SyncRoleDataToSDK()
  1920. local gameRoleInfo = SDKMgr.Instance:GetGameRoleInfo()
  1921. if not gameRoleInfo then
  1922. return nil
  1923. end
  1924. gameRoleInfo.openId = ManagerContainer.LuaGameMgr.openId
  1925. local serverData = ManagerContainer.LuaGameMgr.serverData
  1926. if serverData then
  1927. gameRoleInfo.serverId = serverData.id or 0
  1928. gameRoleInfo.serverName = serverData.name or ''
  1929. else
  1930. gameRoleInfo.serverId = 0
  1931. gameRoleInfo.serverName = ''
  1932. end
  1933. gameRoleInfo.roleId = tostring(self:GetUserId())
  1934. gameRoleInfo.roleName = tostring(self:GetOriUserNickname())
  1935. gameRoleInfo.roleLv = self:GetRoleLv() or 0
  1936. gameRoleInfo.roleCreateTime = self.createRoleTime or ManagerContainer.LuaTimerMgr:CurServerTime()
  1937. gameRoleInfo.roleUpLvTime = self.roleUpLvTime or ManagerContainer.LuaTimerMgr:CurServerTime()
  1938. gameRoleInfo.vipLv = self:GetVipLv() or 0
  1939. gameRoleInfo.gender = self:GetSex() or 0
  1940. gameRoleInfo.jobId = self:GetJobCfgId() or 0
  1941. gameRoleInfo.jobName = self.data.roleBase.roleData.jobName
  1942. local guildId = 0
  1943. local guildName = ""
  1944. local guildDataMgr = ManagerContainer.DataMgr.GuildDataMgr
  1945. if guildDataMgr then
  1946. if guildDataMgr:HasGuild() then
  1947. local briefData = guildDataMgr:GetCurGuildData():GetBriefData()
  1948. guildId = briefData.id
  1949. guildName = briefData.name
  1950. end
  1951. end
  1952. gameRoleInfo.guildId = guildId
  1953. gameRoleInfo.guildName = guildName
  1954. gameRoleInfo.fightPower = self:GetTotalFightPower()
  1955. gameRoleInfo.lastLogoutTime = self.data.roleBase.roleData.lastLogoutTime
  1956. gameRoleInfo.loginTime = self.loginTime or ManagerContainer.LuaTimerMgr:CurServerTime()
  1957. if self.serverStartTime then
  1958. gameRoleInfo.openServerTime = self.serverStartTime / 1000
  1959. end
  1960. return gameRoleInfo
  1961. end
  1962. function UserData:SDKEnterGame()
  1963. self.loginTime = ManagerContainer.LuaTimerMgr:CurServerTime()
  1964. self:SyncRoleDataToSDK()
  1965. SDKMgr.Instance:EnterGame()
  1966. SDKMgr.Instance:ReportLoginRole(0, 0, nil)
  1967. end
  1968. function UserData:SDKExitGame()
  1969. self:SyncRoleDataToSDK()
  1970. SDKMgr.Instance:ExitGame()
  1971. SDKMgr.Instance:ReportLogoutRole(ManagerContainer.LuaTimerMgr:CurServerTime(), nil, nil, nil, 0, 0, nil)
  1972. end
  1973. function UserData:SDKUpdateRoleLv()
  1974. self.roleUpLvTime = ManagerContainer.LuaTimerMgr:CurServerTime()
  1975. self:SyncRoleDataToSDK()
  1976. SDKMgr.Instance:UpdateRoleLv()
  1977. end
  1978. function UserData:GetHeroPetFightPowerByHeroId(id)
  1979. local heroData = self:GetHeroData(id)
  1980. if heroData then
  1981. return heroData.petFightPower or 0
  1982. end
  1983. return 0
  1984. end
  1985. return UserData