UIRoleMessageCtr.lua 25 KB

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