UIRoleMessageCtr.lua 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645
  1. local UIRoleMessageCtr = class("UIRoleMessageCtr", require("UICtrBase"))
  2. local CreateActorSystem = require("CreateActorSystem")
  3. local sortedPartnerDatas
  4. local activationList = {}
  5. local battledPartnerCount = 0
  6. local isOther = false
  7. function UIRoleMessageCtr:Init(view)
  8. self.view = view
  9. ManagerContainer = require("ManagerContainer")
  10. self.createActorSystem = CreateActorSystem:new()
  11. end
  12. function UIRoleMessageCtr:SetData(data)
  13. self.asyncIdx = 0
  14. if data == nil then return end
  15. self.data = data --data._targetTag == 0是玩家自己,除此之外都是其他玩家
  16. self:GetPlayerData();
  17. end
  18. function UIRoleMessageCtr:GetAsyncIdx()
  19. self.asyncIdx = self.asyncIdx + 1
  20. return self.asyncIdx
  21. end
  22. function UIRoleMessageCtr:GetData()
  23. return self.data
  24. end
  25. function UIRoleMessageCtr:OnDispose()
  26. sortedPartnerDatas = nil;
  27. if self.createActorSystem then
  28. self.createActorSystem:Dispose()
  29. self.createActorSystem = nil
  30. end
  31. self.data = nil
  32. self.view = nil
  33. end
  34. ---逻辑处理start
  35. --根据玩家选择的不同,获取不同的玩家数据
  36. function UIRoleMessageCtr:GetPlayerData()
  37. if self.data._targetTag and self.data._targetTag == 0 then --玩家自己
  38. self.data._tidyData = self:TidySelfData();
  39. self:GetRoleSeasonTitle(true, nil, self.data._tidyData);
  40. else --别的玩家,别的玩家的数据要等待服务器发送,所以要等到服务器发送了数据之后才能整理,整理完成之后才能通知view,数据已经整理好了
  41. self.data._targetTag = 1;
  42. self.data._tidyData = self:TidyOtherData(self.data);
  43. self:GetRoleSeasonTitle(false, self._userData.paramList, self.data._tidyData);
  44. end
  45. end
  46. --整理其他玩家的数据
  47. function UIRoleMessageCtr:TidyOtherData(_data)
  48. isOther = true
  49. --LogError(Inspect(_data))
  50. --LogError(Inspect(_data.target_info.role_hero))
  51. if not _data._isCross then
  52. self.createActorSystem:ParseOtherRoleInfo(_data.target_info);
  53. else
  54. self.createActorSystem:ParseFightRoleInfo(_data);
  55. end
  56. local _userData = self.createActorSystem;
  57. local _partnerData = self.createActorSystem;
  58. local _tidyData = {};
  59. local _score = _data.target_info and _data.target_info.danScore or 0;
  60. local _guildName = self.createActorSystem:GetGuildName()
  61. self:TidyDataByData(_tidyData, _userData, _partnerData, _score, _guildName);
  62. self:GetHeadPortrait( _userData, _tidyData);
  63. self._userData = _userData.userData;
  64. self._partnerData = _partnerData.fellewActorDatas;
  65. _tidyData._titleId = _data.target_info and _data.target_info.brief.head_id or self._userData.titleId --其他人的称号Id
  66. return _tidyData;
  67. end
  68. function UIRoleMessageCtr:IsCrossRole()
  69. return self.data._isCross
  70. end
  71. function UIRoleMessageCtr:GetPetDataByHeroId(id)
  72. if isOther then
  73. return self.createActorSystem:GetHeroPetDataByHeroId(id)
  74. else
  75. local heroData = CommonUtil.GetHeroLogicDataByUid(id)
  76. return ManagerContainer.DataMgr.PetDataMgr:GetPetDataById(heroData.battlePetId)
  77. end
  78. end
  79. function UIRoleMessageCtr:GetPetActorDataByPetId(id)
  80. if isOther then
  81. return self.createActorSystem:GetHeroPetActorDataById(id)
  82. else
  83. return ManagerContainer.DataMgr.PetDataMgr:GetPetActorData(id)
  84. end
  85. end
  86. --整理玩家自己的数据
  87. function UIRoleMessageCtr:TidySelfData()
  88. isOther = false
  89. local _tidyData = {};
  90. local curGuildData = ManagerContainer.DataMgr.GuildDataMgr:GetCurGuildData()
  91. local _guildName = curGuildData and curGuildData:GetName() or nil
  92. self:TidyDataByData(_tidyData, ManagerContainer.DataMgr.UserData, ManagerContainer.DataMgr.PartnerData,
  93. ManagerContainer.DataMgr.ArenaData:GetCurDanScore(), _guildName);
  94. self:GetHeadPortrait(ManagerContainer.DataMgr.UserData, _tidyData);
  95. self._userData = ManagerContainer.DataMgr.UserData;
  96. self._partnerData = ManagerContainer.DataMgr.PartnerData;
  97. --角色信息页面end
  98. return _tidyData;
  99. end
  100. function UIRoleMessageCtr:RefreshTitleIconAndName(_titleIcon, _name)
  101. self.data._tidyData._playerData._titleIcon = _titleIcon;
  102. self.data._tidyData._playerData._titleName = _name;
  103. end
  104. --获取不同玩家的赛季信息
  105. function UIRoleMessageCtr:GetRoleSeasonTitle(_isSelf, _paramList, _tidyData)
  106. local _titleIcon = "";
  107. if _isSelf then
  108. _tidyData._playerData._titleName, _titleIcon, _tidyData._playerData._titleIcon = I18N.T("None") --ManagerContainer.DataMgr.CompetitionData:GetCurSeasonTitle(); --称号;
  109. else
  110. _tidyData._playerData._titleName, _titleIcon, _tidyData._playerData._titleIcon = I18N.T("None") --self:GetCurSeasonTitle(_paramList); --称号;
  111. end
  112. end
  113. --获取赛季信息
  114. function UIRoleMessageCtr:GetCurSeasonTitle(_paramList)
  115. local title = I18N.T("None")
  116. local titleIcon = nil;
  117. local competitionTitleIcon = nil;
  118. title, titleIcon, competitionTitleIcon = CommonUtil.GetCurSeasonTitle(_paramList);
  119. return title, titleIcon, competitionTitleIcon
  120. end
  121. --获取玩家头像图片
  122. function UIRoleMessageCtr:GetHeadPortrait(_userData, _tidyData)
  123. _tidyData._playerData._headIcon = _userData:GetUserHeadIcon(); --头像图片
  124. _tidyData._playerData._headIconId = _headPortraitId;
  125. end
  126. --根据传进来的信息整理不同的数据
  127. function UIRoleMessageCtr:TidyDataByData(_tidyData, _userData, _partnerData, _danScore, _guildName)
  128. --玩家页面数据start
  129. _tidyData._playerData = {};
  130. _tidyData._playerData._baseLevel = _userData:GetRoleLv(); --base等级
  131. _tidyData._playerData._nickName = _userData:GetUserNickname(); --玩家昵称
  132. _tidyData._playerData._jobId = _userData:GetJobCfgId(); --职业Id
  133. _tidyData._playerData._headFrameId = _userData:GetHeadFrameId(); --头像框id
  134. if self.data._targetTag and self.data._targetTag == 0 then
  135. _tidyData._playerData._vipLv = _userData:GetVipLv()--自己的vip
  136. else
  137. _tidyData._playerData._vipLv = _userData.userData.vipLv --其他人的vip
  138. end
  139. local _jobCfg = ManagerContainer.CfgMgr:GetJobDataById(_userData:GetJobCfgId());
  140. _tidyData._playerData._leaderJobIcon = _jobCfg.JobIcon;
  141. _tidyData._playerData._leaderIsMagic = false; --默认主角是物攻型角色
  142. if _jobCfg then
  143. if _jobCfg.AtkRate > 0 then --物攻系数大于零,说明主角是物攻型角色
  144. _tidyData._playerData._leaderIsMagic = false;
  145. elseif _jobCfg.MatkRate > 0 then --魔攻系数大于零,说明主角是魔攻型角色
  146. _tidyData._playerData._leaderIsMagic = true;
  147. else
  148. LogError("主角的JobId是:" .. tostring(_jobCfg.Id) .. " 数据的魔攻系数和物攻系数都为0.这两个参数至少有一个不能是零。")
  149. end
  150. else
  151. LogError("没有找到主角的JOb数据,主角的JobId是:" .. tostring(_userData:GetJobCfgId()) .. "请检查JobCfg表");
  152. end
  153. --_tidyData._playerData._jobLevel = _userData:GetJobLv(); --职业等级
  154. _tidyData._playerData._totalPower = _userData:GetTotalFightPower(); --先获取主角的战力
  155. local _heroData = _userData:GetPlayerActorParam();
  156. _tidyData._playerData._baseAttack = SDataUtil.InvConvert(_heroData.BaseAttack); --一级物攻属性
  157. _tidyData._playerData._baseMagicAttack = SDataUtil.InvConvert(_heroData.BaseMagicAttack) --一级魔攻属性
  158. _tidyData._playerData._allianceName = (_guildName and _guildName ~= '') and _guildName or string.formatbykey('None'); --TODO:工会模块尚未开发
  159. _tidyData._playerData._allianceIcon = ""; --TODO:工会模块尚未开发
  160. _tidyData._playerData._dun = _danScore; --赛季积分,段位和段位图标啥的还得自己算
  161. _tidyData._playerData._id = _userData:GetId(); --id,这个更类似于index
  162. _tidyData._playerData._skills = _userData:GetSkillData(_tidyData._playerData._id); --主角的技能数据
  163. _tidyData._playerData._slots = _userData:GetCurSlotInfos(_tidyData._playerData._id); --主角的装备信息
  164. --找到主角的模型用的start
  165. _tidyData._playerData._roleId = _userData:GetUserRoleId();
  166. _tidyData._playerData._viewData = _userData:GetViewData();
  167. _tidyData._playerData._extGoesShowData = _userData:GetMainRoleData().extGoesShowData
  168. --找到主角模型用的end
  169. --战力
  170. _tidyData._playerData._powers = {};
  171. _tidyData._playerData._powers[1] = SDataUtil.InvConvert(_userData:GetHeroData().fightPower or 0);
  172. _tidyData._playerData.petFightPower = {}
  173. _tidyData._playerData.petFightPower[1] = SDataUtil.InvConvert(_userData:GetHeroData().petFightPower or 0);
  174. --玩家页面数据end
  175. --角色信息页面start
  176. _tidyData._roleData = {};
  177. _tidyData._roleData._partnerDatas = _partnerData:GetPartnerDatas(); --队友
  178. _tidyData._roleData._activationList = self:RefreshPartnersLists(_tidyData._roleData._partnerDatas); --获取所有的招募队友
  179. _tidyData._roleData._sortPartner = self:GetSortedPartnerDatas(_tidyData._roleData._partnerDatas);
  180. _tidyData._roleData._partnerSkill = {};
  181. _tidyData._roleData._partnerBaseAttack = {};
  182. _tidyData._roleData._partnerBaseMagicAttack = {};
  183. for k, v in ipairs(_tidyData._roleData._sortPartner) do
  184. --LogError(Inspect(v))
  185. local _logicId = k + 1;
  186. _tidyData._roleData._partnerSkill[k] = _userData:GetSkillData(v.id); --技能
  187. _tidyData._playerData._powers[_logicId] = SDataUtil.InvConvert(v.fightPower); --战力
  188. _tidyData._playerData.petFightPower[_logicId] = SDataUtil.InvConvert(v.petFightPower or 0);
  189. --记录初始物攻和初始魔攻
  190. local _partnerData = ManagerContainer.CfgMgr:GetPartnerDataById(v.configId);
  191. _tidyData._roleData._partnerBaseAttack[k] = _partnerData.Atk;
  192. _tidyData._roleData._partnerBaseMagicAttack[k] = _partnerData.Matk;
  193. end
  194. --获取所有角色的所有属性
  195. _tidyData._roleData._Attr = {
  196. ["leader"] = {};
  197. ["partner"] = {};
  198. };
  199. if self.data._targetTag and self.data._targetTag == 0 then
  200. _tidyData._roleData._Attr.leader = _userData:GetAllAttrs();
  201. else
  202. _tidyData._roleData._Attr.leader = _userData:GetAllFinalAttr();
  203. end
  204. --获取所有角色的基础属性
  205. _tidyData._roleData._baseAttr = {
  206. ["leader"] = {};
  207. ["partner"] = {};
  208. };
  209. --通过判断对象的一级基础魔攻和物攻的值来判断他是物攻型还是魔攻型从而决定显示魔攻值还是物攻值
  210. local _JudgeAttack = function(_attrs, _baseAttack, _baseMagicAttack, _isLeader, _leaderIsMagic)
  211. local _attackIndex, _magicAttackIndex = -1, -1;
  212. for i = #_attrs, 1, -1 do
  213. if _attrs[i].key == Enum.HeroAttrType.Attack then
  214. _attackIndex = i;
  215. end
  216. if _attrs[i].key == Enum.HeroAttrType.MagicAttack then
  217. _magicAttackIndex = i;
  218. end
  219. end
  220. local _removeIndex = -1;
  221. if not _isLeader then
  222. if _baseAttack == 0 or _baseAttack == nil then
  223. _removeIndex = _attackIndex;
  224. elseif _baseMagicAttack == 0 or _baseMagicAttack == nil then
  225. _removeIndex = _magicAttackIndex;
  226. else --进到这里就是策划配错了,这里默认将魔攻去掉,不显示,先确保游戏正常进行
  227. _removeIndex = _magicAttackIndex;
  228. end
  229. else
  230. if _leaderIsMagic then
  231. _removeIndex = _attackIndex;
  232. else
  233. _removeIndex = _magicAttackIndex;
  234. end
  235. end
  236. if _removeIndex ~= -1 then
  237. table.remove(_attrs, _removeIndex)
  238. end
  239. end
  240. local _attrKeys = self:GetBaseAttrKeys();
  241. for i = 1, #_attrKeys do
  242. local _value = SDataUtil.InvConvert(_heroData:GetFinalAttr(_attrKeys[i])) or 0;
  243. if not ((_attrKeys[i] == Enum.HeroAttrType.Attack or _attrKeys[i] == Enum.HeroAttrType.MagicAttack) and _value == 0) then
  244. table.insert(_tidyData._roleData._baseAttr.leader, {
  245. ["key"] = _attrKeys[i],
  246. ["value"] = math.floor(_value);
  247. })
  248. end
  249. end
  250. _JudgeAttack(_tidyData._roleData._baseAttr.leader, _tidyData._playerData._baseAttack, _tidyData._playerData._baseMagicAttack, true, _tidyData._playerData._leaderIsMagic);
  251. for i = 1, #_tidyData._roleData._sortPartner do
  252. local _attrs = {};
  253. for j = 1, #_attrKeys do
  254. local PartnerData = _tidyData._roleData._sortPartner[i]
  255. local _value = SDataUtil.InvConvert(_tidyData._roleData._sortPartner[i].attrs[_attrKeys[j]] or 0);
  256. if nil == self.data._targetTag or self.data._targetTag ~= 0 then
  257. local PartnerActorData =_userData:FindFellowActorDataByData(PartnerData)
  258. if nil ~= PartnerActorData then
  259. _value = SDataUtil.InvConvert(PartnerActorData:GetFinalAttr(_attrKeys[j]) or 0);
  260. end
  261. end
  262. if not ((_attrKeys[j] == Enum.HeroAttrType.Attack or _attrKeys[j] == Enum.HeroAttrType.MagicAttack) and _value == 0) then
  263. table.insert(_attrs, {
  264. ["key"] = _attrKeys[j],
  265. ["value"] = math.floor(_value);
  266. })
  267. end
  268. end
  269. _JudgeAttack(_attrs, _tidyData._roleData._partnerBaseAttack[i], _tidyData._roleData._partnerBaseMagicAttack[i], false, nil);
  270. _tidyData._roleData._baseAttr.partner[i] = _attrs;
  271. end
  272. --获取所有角色的详细属性
  273. _tidyData._roleData._detailAttr = {
  274. ["leader"] = {};
  275. ["partner"] = {};
  276. };
  277. local _attrKeys = self:GetDetailAttrKeys();
  278. for i = 1, #_attrKeys do
  279. local _value = SDataUtil.InvConvert(_heroData:GetFinalAttr(_attrKeys[i])) or 0;
  280. table.insert(_tidyData._roleData._detailAttr.leader, {
  281. ["key"] = _attrKeys[i],
  282. ["value"] = math.floor(_value);
  283. })
  284. end
  285. for i = 1, #_tidyData._roleData._sortPartner do
  286. local _attrs = {};
  287. for j = 1, #_attrKeys do
  288. local PartnerData = _tidyData._roleData._sortPartner[i]
  289. local _value = SDataUtil.InvConvert(_tidyData._roleData._sortPartner[i].attrs[_attrKeys[j]] or 0);
  290. if nil == self.data._targetTag or self.data._targetTag ~= 0 then
  291. local PartnerActorData =_userData:FindFellowActorDataByData(PartnerData)
  292. if nil ~= PartnerActorData then
  293. _value = SDataUtil.InvConvert(PartnerActorData:GetFinalAttr(_attrKeys[j]) or 0);
  294. end
  295. end
  296. table.insert(_attrs, {
  297. ["key"] = _attrKeys[j],
  298. ["value"] = math.floor(_value);
  299. })
  300. end
  301. _tidyData._roleData._detailAttr.partner[i] = _attrs;
  302. local partnerData = _tidyData._roleData._sortPartner[i]
  303. local tbFinalattrs = partnerData.attrs
  304. if self.data._targetTag and self.data._targetTag ~= 0 then
  305. local PartnerActorData =_userData:FindFellowActorDataByData(partnerData)
  306. for k,v in pairs(partnerData.attrs) do
  307. if nil ~= PartnerActorData then
  308. local _value = SDataUtil.InvConvert(PartnerActorData:GetFinalAttr(k) or 0);
  309. tbFinalattrs[k] = _value
  310. end
  311. end
  312. end
  313. _tidyData._roleData._Attr.partner[i] = tbFinalattrs
  314. end
  315. end
  316. --详细属性的key
  317. function UIRoleMessageCtr:GetDetailAttrKeys()
  318. local _detailAttrKeys = {};
  319. table.insert(_detailAttrKeys, Enum.HeroAttrType.Life); --生命,血量
  320. table.insert(_detailAttrKeys, Enum.HeroAttrType.Sp); --蓝量
  321. table.insert(_detailAttrKeys, Enum.HeroAttrType.Attack); --攻击
  322. table.insert(_detailAttrKeys, Enum.HeroAttrType.Defense); --物防
  323. table.insert(_detailAttrKeys, Enum.HeroAttrType.MagicAttack); --魔攻
  324. table.insert(_detailAttrKeys, Enum.HeroAttrType.MagicDefense); --魔抗
  325. table.insert(_detailAttrKeys, Enum.HeroAttrType.Hit); --命中
  326. table.insert(_detailAttrKeys, Enum.HeroAttrType.Dodge); --闪避
  327. table.insert(_detailAttrKeys, Enum.HeroAttrType.Crit); --暴击
  328. table.insert(_detailAttrKeys, Enum.HeroAttrType.Ten); --忽视物防
  329. table.insert(_detailAttrKeys, Enum.HeroAttrType.AttackSpeed); --攻速
  330. table.insert(_detailAttrKeys, Enum.HeroAttrType.CastAcceleration); --忽视魔防
  331. return _detailAttrKeys;
  332. end
  333. --基础属性的key
  334. function UIRoleMessageCtr:GetBaseAttrKeys()
  335. local _baseAttrKeys = {};
  336. table.insert(_baseAttrKeys, Enum.HeroAttrType.Life); --生命,血量
  337. table.insert(_baseAttrKeys, Enum.HeroAttrType.Sp); --蓝量
  338. table.insert(_baseAttrKeys, Enum.HeroAttrType.Attack); --攻击
  339. table.insert(_baseAttrKeys, Enum.HeroAttrType.MagicAttack); --攻击
  340. table.insert(_baseAttrKeys, Enum.HeroAttrType.Defense); --物防
  341. table.insert(_baseAttrKeys, Enum.HeroAttrType.MagicDefense); --魔抗
  342. table.insert(_baseAttrKeys, Enum.HeroAttrType.AttackSpeed); --攻速
  343. table.insert(_baseAttrKeys, Enum.HeroAttrType.Hit); --命中
  344. table.insert(_baseAttrKeys, Enum.HeroAttrType.Dodge); --闪避
  345. table.insert(_baseAttrKeys, Enum.HeroAttrType.Crit); --暴击
  346. table.insert(_baseAttrKeys, Enum.HeroAttrType.Ten); --韧性
  347. return _baseAttrKeys;
  348. end
  349. --获取主角的数据(角色界面的头像相关)
  350. function UIRoleMessageCtr:GetLeaderHeadData()
  351. local _outPut = {};
  352. local _data = self.data._tidyData;
  353. _outPut._id = 1;
  354. _outPut._isLeader = true; --是否是主角,这个值决定是否显示主角角标
  355. _outPut._isBattle = false; --是否上阵,这个不用管的,不管是true还是false都显示不出来,会被主角的图标掩盖
  356. _outPut._get = true; --是否招募到了,这个值决定显示灰色还是亮色
  357. _outPut._configId = _data._playerData._id;
  358. _outPut._leaderJobIcon = _data._playerData._leaderJobIcon; --主角的jonicon
  359. _outPut._jobCfgId = _data._playerData._jobId;
  360. _outPut._jobData = ManagerContainer.CfgMgr:GetJobDataById(_data._playerData._jobId)
  361. _outPut._jobICon = ManagerContainer.CfgMgr:GetJobDataById(_data._playerData._jobId).JobIcon; --主角的jobIcon
  362. _outPut._headIcon = _data._playerData._headIcon; --头像
  363. _outPut._baseLevel = _data._playerData._baseLevel; --base等级
  364. _outPut._strengthLevel = 100; --和自己没有突破,所以直接是最高的突破等级
  365. _outPut._name = _data._playerData._nickName; --玩家昵称
  366. _outPut._power = _data._playerData._powers[1] or 0; --战力
  367. _outPut._slots = _data._playerData._slots --主角装备信息
  368. _outPut._skills = _data._playerData._skills; --主角的技能数据
  369. _outPut._roleId = _data._playerData._roleId;
  370. _outPut._viewData = _data._playerData._viewData;
  371. _outPut._baseAttr = _data._roleData._baseAttr.leader; --主角的基础属性
  372. _outPut._detailAttr = _data._roleData._detailAttr.leader; --主角的详细属性
  373. _outPut._headFrameId = _data._playerData._headFrameId;
  374. _outPut._extGoesShowData = _data._playerData._extGoesShowData;
  375. if nil ~= _data._playerData.petFightPower[1] then--战力
  376. if type(_data._playerData.petFightPower[1]) ~= "number" then
  377. _outPut.petFightPower = SInt.InvConvert(_data._playerData.petFightPower[1])
  378. else
  379. _outPut.petFightPower = _data._playerData.petFightPower[1]
  380. end
  381. else
  382. _outPut.petFightPower = 0
  383. end
  384. --[[
  385. local twoAttrAddDic = {};
  386. local dic = ManagerContainer.LuaActorDataMgr:GetRoleIncreaseSecondAttrVal(
  387. _outPut._detailAttr[Enum.HeroAttrType.STR],
  388. _outPut._detailAttr[Enum.HeroAttrType.AGI],
  389. _outPut._detailAttr[Enum.HeroAttrType.INT],
  390. _outPut._detailAttr[Enum.HeroAttrType.VIT],
  391. _outPut._detailAttr[Enum.HeroAttrType.DEX],
  392. _outPut._detailAttr[Enum.HeroAttrType.LUK]
  393. )
  394. local iter = dic:GetEnumerator()
  395. while iter:MoveNext() do
  396. twoAttrAddDic[iter.Current.Key] = math.floor(iter.Current.Value)
  397. end
  398. ]]--
  399. _outPut.addList = {}
  400. for k,v in pairs(_data._roleData._Attr.leader) do
  401. if k >= Enum.HeroAttrType.Life and k <= Enum.HeroAttrType.CastAcceleration then
  402. --baseList[#baseList + 1] = {k, v, twoAttrAddDic[k] or 0}
  403. else
  404. if #_data._roleData._Attr.leader > 0 then
  405. if k >= Enum.HeroAttrType.RealHurt then
  406. -- if v > 0 then
  407. if SDataUtil.IsGreater(v,0) then
  408. _outPut.addList[#_outPut.addList + 1] = {k, v, 0}
  409. end
  410. end
  411. end
  412. end
  413. end
  414. return _outPut;
  415. end
  416. --获取队友的数据
  417. function UIRoleMessageCtr:GetPartnerData(_id)
  418. local _sortIndex = _id - 1;
  419. local _outPut = {};
  420. local _data = self.data._tidyData._roleData._sortPartner[_sortIndex];
  421. local _partnerData = ManagerContainer.CfgMgr:GetPartnerDataById(_data.configId);
  422. _outPut.sortIndex = _sortIndex
  423. _outPut._jobData = ManagerContainer.CfgMgr:GetPartnerDataById(_data.configId);
  424. _outPut._jobCfgId = _data.configId;
  425. _outPut._id = _data.id;
  426. _outPut._isLeader = false; --不是主角
  427. _outPut._isBattle = _data.isBattle; --是否上阵
  428. _outPut._get = _data.owned; --是否招募
  429. _outPut._configId = _data.configId;
  430. _outPut._jobICon = _partnerData.JobIcon; --jobIcon
  431. _outPut._headIcon = _partnerData.HeadId; --头像图片
  432. _outPut._baseLevel = _data.baseLevel; --base等级
  433. _outPut._strengthLevel = _data.strengthLevel; --突破等级
  434. _outPut._name = I18N.SetLanguageValue(_partnerData.Name); --名字
  435. _outPut._power = self.data._tidyData._playerData._powers[_id] or 0; --战力
  436. _outPut._slots = _data.slot.slot_list;
  437. _outPut._headFrameId = -1;
  438. _outPut._extGoesShowData = _data.extGoesShowData
  439. --LogError(tostring(self.data._tidyData._playerData.petFightPower[_id]))
  440. if nil ~= self.data._tidyData._playerData.petFightPower[_id] then--战力
  441. if type(self.data._tidyData._playerData.petFightPower[_id]) ~= "number" then
  442. _outPut.petFightPower = SInt.InvConvert(self.data._tidyData._playerData.petFightPower[_id])
  443. else
  444. _outPut.petFightPower = self.data._tidyData._playerData.petFightPower[_id]
  445. end
  446. else
  447. _outPut.petFightPower = 0
  448. end
  449. local _indexId = _id - 1; --传过来的_id是加了主角的顺序,主角是1队友是从2开始的,但是下边的这些数据没有存储主角的数据,所以1的位置就开始存放队友的数据了
  450. _outPut._skills = self.data._tidyData._roleData._partnerSkill[_indexId] --队友的技能
  451. _outPut._baseAttr = self.data._tidyData._roleData._baseAttr.partner[_indexId]; --队友的基础属性
  452. _outPut._detailAttr = self.data._tidyData._roleData._detailAttr.partner[_indexId]; --队友的详细属性
  453. --[[
  454. local twoAttrAddDic = {};
  455. local dic = ManagerContainer.LuaActorDataMgr:GetRoleIncreaseSecondAttrVal(
  456. _outPut._detailAttr[Enum.HeroAttrType.STR],
  457. _outPut._detailAttr[Enum.HeroAttrType.AGI],
  458. _outPut._detailAttr[Enum.HeroAttrType.INT],
  459. _outPut._detailAttr[Enum.HeroAttrType.VIT],
  460. _outPut._detailAttr[Enum.HeroAttrType.DEX],
  461. _outPut._detailAttr[Enum.HeroAttrType.LUK]
  462. )
  463. local iter = dic:GetEnumerator()
  464. while iter:MoveNext() do
  465. twoAttrAddDic[iter.Current.Key] = math.floor(iter.Current.Value)
  466. end
  467. ]]--
  468. _outPut.addList = {}
  469. local _partnerAttrs = self.data._tidyData._roleData._Attr.partner[_indexId]
  470. for k,v in pairs(_partnerAttrs) do
  471. if k >= Enum.HeroAttrType.Life and k <= Enum.HeroAttrType.CastAcceleration then
  472. --baseList[#baseList + 1] = {k, v, twoAttrAddDic[k] or 0}
  473. else
  474. if #_partnerAttrs > 0 then
  475. if k >= Enum.HeroAttrType.RealHurt then
  476. -- if v > 0 then
  477. if SDataUtil.IsGreater(v,0) then
  478. _outPut.addList[#_outPut.addList + 1] = {k, v, 0}
  479. end
  480. end
  481. end
  482. end
  483. end
  484. return _outPut;
  485. end
  486. --判断是否招募
  487. function UIRoleMessageCtr:JudgeGet(_id)
  488. for k, v in pairs(self.data._tidyData_roleData._activationList) do
  489. if _id == v.id then
  490. return true;
  491. end
  492. end
  493. return false;
  494. end
  495. --判断是否是招募的队友
  496. local function IsActivationPartner(partnerId, activationList)
  497. for _,v in pairs(activationList) do
  498. if v.configId == partnerId then
  499. return v
  500. end
  501. end
  502. return nil
  503. end
  504. --获取所有的招募到的队友
  505. function UIRoleMessageCtr:RefreshPartnersLists(_partnerDatas)
  506. activationList = {}
  507. battledPartnerCount = 0
  508. local activationPartners = _partnerDatas
  509. local partnerDatas = ManagerContainer.CfgMgr:GetAllPartnerDatas()
  510. for k,v in pairs(partnerDatas) do
  511. local data = IsActivationPartner(k, activationPartners)
  512. if data ~= nil and data.owned and data.isBattle then
  513. activationList[#activationList + 1] = {id = v.ParterId, NatureId = v.NatureId, baseLevel = data.base_level, strenthLevel = data.strength_level}
  514. battledPartnerCount = battledPartnerCount + 1
  515. end
  516. end
  517. CommonUtil.ArraySortSelections(activationList, Enum.TableSortRule.Down, "status", "baseLevel")
  518. return activationList
  519. end
  520. --设置当前的队友的uid
  521. function UIRoleMessageCtr:SetCurPartnerUid(_uid)
  522. self._uid = _uid;
  523. end
  524. --获取当前队友的uid
  525. function UIRoleMessageCtr:GetCurPartnerUid()
  526. return self._uid and self._uid or 0;
  527. end
  528. --判断是否是主角
  529. function UIRoleMessageCtr:JudgeIsLeader()
  530. return self._uid == 1;
  531. end
  532. ---排序start
  533. function UIRoleMessageCtr:GetSortedPartnerDatas(_data)
  534. if sortedPartnerDatas == nil then
  535. self:GetSlotSortPartnerDatas(_data)
  536. end
  537. return sortedPartnerDatas
  538. end
  539. function UIRoleMessageCtr:GetSlotSortPartnerDatas(_data)
  540. local partnerDatas = _data
  541. sortedPartnerDatas = {}
  542. for _,v in pairs(partnerDatas) do
  543. sortedPartnerDatas[#sortedPartnerDatas + 1] = v
  544. end
  545. table.sort(sortedPartnerDatas, function (a, b)
  546. if a.owned and b.owned then
  547. return a.post < b.post
  548. else
  549. if a.owned and not b.owned then
  550. return true
  551. elseif not a.owned and b.owned then
  552. return false
  553. else
  554. return a.post < b.post
  555. end
  556. end
  557. end)
  558. end
  559. ---排序end
  560. ---逻辑处理end
  561. function UIRoleMessageCtr:GetPetFightPowerByHeroId(id)
  562. if isOther then
  563. return self.createActorSystem:GetHeroPetFightPowerByHeroId(id)
  564. else
  565. return ManagerContainer.DataMgr.UserData:GetHeroPetFightPowerByHeroId(id)
  566. end
  567. end
  568. function UIRoleMessageCtr:GetCardBlessData(id)
  569. if isOther then
  570. local data1, slot = self.createActorSystem:RefreshEquipedCardSuitData(id)
  571. if not data1 then
  572. return
  573. end
  574. local data = {curLv = data1[1], count = data1[2], totalCount = data1[3], state = data1[4], slot = slot}
  575. return data
  576. else
  577. local curLv = ManagerContainer.DataMgr.CardData:GetCardSuitLvById(id)
  578. local count,totalCount = ManagerContainer.DataMgr.CardData:GetCardSuitCountById(id)
  579. local state = ManagerContainer.DataMgr.CardData:GetCardSuitStateById(id)
  580. local slot = ManagerContainer.DataMgr.UserData:GetSlotInfoById(id)
  581. local data = {curLv = curLv, count = count, totalCount = totalCount, state = state, slot = slot}
  582. return data
  583. end
  584. end
  585. function UIRoleMessageCtr:GetSkillEquipData(id)
  586. if isOther then
  587. return self.createActorSystem:GetHeroSkillEquipDataByHeroId(id)
  588. else
  589. local heroData = CommonUtil.GetHeroLogicDataByUid(id)
  590. local skillEquipSlot = heroData.skillEquipSlot
  591. local skillEquipData = skillEquipSlot.slotList[1]
  592. return skillEquipData
  593. end
  594. end
  595. return UIRoleMessageCtr