NewMainRoleModel = NewMainRoleModel or BaseClass(BaseModel) NewMainRoleModel.SET_DESIGNATION = "NewMainRoleModel.SET_DESIGNATION" NewMainRoleModel.SHOW_RED_DOT = "NewMainRoleModel.SHOW_RED_DOT" NewMainRoleModel.OPEN_ALL_ADDITION_VIEW = "NewMainRoleModel.OPEN_ALL_ADDITION_VIEW" NewMainRoleModel.REQUEST_OTHER_PLAYER_INFO = "NewMainRoleModel.REQUEST_OTHER_PLAYER_INFO" NewMainRoleModel.SEND_TURN_CAREER_PROTOCAL = "NewMainRoleModel.SEND_TURN_CAREER_PROTOCAL" NewMainRoleModel.RequestWorldLevel = "NewMainRoleModel.RequestWorldLevel" NewMainRoleModel.OPEN_HATRED_VIEW = "NewMainRoleModel.OPEN_HATRED_VIEW" -- 打开善恶值界面 NewMainRoleModel.REFRESH_ROLE_HEAD_RED = "NewMainRoleModel.REFRESH_ROLE_HEAD_RED" -- 更新头像红点 NewMainRoleModel.REFRESH_ROLE_HEAD_ACTIVATE = "NewMainRoleModel.REFRESH_ROLE_HEAD_ACTIVATE" -- 更新头像激活信息 NewMainRoleModel.ANS_UPDATE_RED_DOT = "NewMainRoleModel.ANS_UPDATE_RED_DOT" -- 回应更新红点 NewMainRoleModel.UPDATE_RED_DOT = "NewMainRoleModel.UPDATE_RED_DOT" -- 更新红点方法(数据刷新就发这个监听) NewMainRoleModel.CLOSE_NEW_MAIN_ROLE_VIEW = "NewMainRoleModel.CLOSE_NEW_MAIN_ROLE_VIEW" --关闭界面 NewMainRoleModel.OTHER_PLAYER_INFO_MODULE_ID = {--其他玩家对应的模块id CSP = 650, --跨服3v3 CS1VN = 621, --1vN KFRANK = 226, -- 跨服榜单 } NewMainRoleModel.TabId = { ROLE = 1, -- 成就 DESIGNATION = 2, FASHION = 3, Light = 5, -- NATURE = 6, SOULPOWER = 7, KFWORLD = 8, REIN = 100, -- 转职界面要放在最后面 } -- 职业描述面板页签文本 NewMainRoleModel.ProfressTabStr = { [0] = "敬请期待", [1] = "剑士", [2] = "灵师", } -- 职业描述界面展示的技能 NewMainRoleModel.ProfressShowSkill = { [1] = { [0] = {101011,101021,101031,101041}, -- 0转 [1] = {101051,101061,101071,101081}, -- 1转 [2] = {101051,101061,101071,101081}, -- 2转 }, [2] = { [0] = {103011,103021,103031,103041}, -- 0转 [1] = {103051,103061,103071,103081}, -- 1转 [2] = {103051,103061,103071,103081}, -- 2转 }, } NewMainRoleModel.HeadType = 14 NewMainRoleModel.HeadSubType = 2 -- 转职头像是1,运营道具头像是2 function NewMainRoleModel:__init() NewMainRoleModel.Instance = self self.is_quick_use = false self.quick_use_num = 0 self.redDotBit = 0 self.head_basic_list = nil -- 头像道具配置 self.activated_role_head_list = {} -- 已激活头像协议,内容为已激活的称号id列表 self.role_head_status = {} -- 头像激活状态列表,格式为 称号物品id = status(1可激活 2已激活, 无状态则是未激活) self.role_head_info = nil -- 获取当前的头像信息 self.role_rein_head_info = nil -- 获取当前角色职业及性别的配置默认头像 self.mainrole_red_dot = {}--角色界面红点 self.login_time_data = nil -- 登录时间查询返回数据 self.is_today_first_login = false end function NewMainRoleModel:getInstance() if NewMainRoleModel.Instance == nil then NewMainRoleModel.New() end return NewMainRoleModel.Instance end function NewMainRoleModel:GetInstance() if NewMainRoleModel.Instance == nil then NewMainRoleModel.New() end return NewMainRoleModel.Instance end function NewMainRoleModel:SetRoleFigure( vo ) self.other_player_vo = vo end -- function NewMainRoleModel:UpdateTabDot(type) -- local value -- if type == 1 then -- elseif type == 2 then -- value = false --DesignationModel:getInstance():CheckRedDot() -- end -- self:SetRedDot(type, value) -- end -- function NewMainRoleModel:SetRedDot(type, value) -- local newValue = self.redDotBit -- if value then -- newValue = bit.bor(self.redDotBit, bit.lshift(1, type)) -- else -- newValue = bit.band(self.redDotBit, bit.bnot(bit.lshift(1, type))) -- end -- self:ChangeVar("redDotBit", newValue) -- GlobalEventSystem:Fire(EventName.SHOW_FUNCTION_RED_POINT, 130, self.redDotBit > 0) -- end function NewMainRoleModel:IsNeedRedAll( ) for k,v in pairs(NewMainRoleModel.TabId) do self:IsNeedRed(v) end end function NewMainRoleModel:IsNeedRed( tab_id ) local bool = false if tab_id == NewMainRoleModel.TabId.ROLE then -- bool = AchieveModel:getInstance():CheckMainRoleInfoViewAchieveRed() -- 成就不在角色进了 -- elseif tab_id == NewMainRoleModel.TabId.DESIGNATION then -- bool = DesignationModel:GetInstance():CheckDesignationRedDot() -- elseif tab_id == NewMainRoleModel.TabId.FASHION then -- bool = FashionModel:getInstance():CheckFashionRedDot(true) or FashionModel:GetInstance():IsFashionSuitNeedRed() elseif tab_id == NewMainRoleModel.TabId.Light then bool = LightModel:GetInstance():GetLightAllRed(true) elseif tab_id == NewMainRoleModel.TabId.NATURE then bool = NatureModel:getInstance():GetNatureAllRed(true) elseif tab_id == NewMainRoleModel.TabId.SOULPOWER then bool = SoulPowerModel:getInstance():IsSoulPowerRed() elseif tab_id == NewMainRoleModel.TabId.REIN then bool = ReincarnationModel:getInstance():GetReinRed() elseif tab_id == NewMainRoleModel.TabId.KFWORLD then bool = KfWorldModel:getInstance():GetRewardGetRed() end self.mainrole_red_dot[tab_id] = bool self:Fire(NewMainRoleModel.ANS_UPDATE_RED_DOT,tab_id,bool) end function NewMainRoleModel:GetAllRedDot( ) return self.mainrole_red_dot end -- 获取物品配置中称号的部分内容 获取运营头像 function NewMainRoleModel:GetHeadGoodsCfgData( ) if not self.head_basic_list then self.head_basic_list = {} local career = RoleManager:getInstance().mainRoleInfo.career local turn = RoleManager:getInstance().mainRoleInfo.turn local career_list for k, v in pairs(Config.Profilephoto) do career_list = stringtotable(v.career) for k2, v2 in ipairs(career_list) do -- 目标转职是0且【目标职业是0】或【存在玩家本身的职业】,代表通用(即运营活动)头像 if v.turn <= turn and ((#career_list == 1 and v2 == 0) or (#career_list > 1 and v2 == career)) then self.head_basic_list[#self.head_basic_list+1] = v break end end end end return DeepCopy(self.head_basic_list) end -- 获取背包中全部的头像道具 function NewMainRoleModel:GetBagHeadItem() local head_goods_list = GoodsModel:getInstance():GetGoodsByType(NewMainRoleModel.HeadType, NewMainRoleModel.HeadSubType) local tb = {} for k, v in pairs(head_goods_list) do tb[v.type_id] = true end return tb end -- 通过13088协议来获取当前已经激活和背包中可以激活的称号 function NewMainRoleModel:SetActivatedRoleHeadInfo( vo ) if not vo then return end self.activated_role_head_list = {} for k, v in ipairs(vo) do self.activated_role_head_list[#self.activated_role_head_list+1] = v.id end -- print("Saber:NewMainRoleModel [start:167] self.activated_role_head_list ------------------------------------------") -- PrintTable(self.activated_role_head_list) self:UpdateRoleHeadStatus() end function NewMainRoleModel:UpdateActivatedRoleHeadData(photo_id) if not photo_id then return end self.activated_role_head_list = self.activated_role_head_list or {} self.activated_role_head_list[#self.activated_role_head_list+1] = photo_id self:UpdateRoleHeadStatus() end -- 更新道具激活状态 function NewMainRoleModel:UpdateRoleHeadStatus() self.role_head_status = {} for k, v in pairs(self.activated_role_head_list) do self.role_head_status[v] = 2 -- 2为已激活 end local head_item_list = self:GetBagHeadItem() for p_id, v in pairs(head_item_list) do -- 如果已激活的称号中不存在该背包中的称号,则表示有称号可以激活 if not self.role_head_status[p_id] then self.role_head_status[p_id] = 1 -- 1为可激活 end end -- 更新了道具就要顺便更一下红点 self:RefreshRoleHeadRed() end -- 获取道具头像信息及激活状态 function NewMainRoleModel:GetRoleHeadInfo( ) -- 获取头像的基本配置 local role_goods_head_info = self:GetHeadGoodsCfgData() local role_rein_head_info = self:GetRoleReinHeadInfo() for k, v in pairs(role_goods_head_info) do if self.role_head_status[v.photo_id] then -- 已激活&可激活 v.status = self.role_head_status[v.photo_id] else -- 未激活 v.status = 0 end v.is_rein_head = false end local turn = RoleManager.Instance.mainRoleInfo.turn for k, v in pairs(role_rein_head_info) do v.status = v.turn <= turn and 2 or 0 v.is_rein_head = true end self.role_head_info = TableConcat(role_rein_head_info, role_goods_head_info) -- 根据状态和道具id进行排序 local arg = {"status", "photo_id"} local condition = {Array.UPPER, Array.LOWER} SortTools.MoreKeysSorter(self.role_head_info, arg, condition) -- print("Saber:NewMainRoleModel [start:183] self.role_head_info ------------------------------------------") -- PrintTable(self.role_head_info) return self.role_head_info end function NewMainRoleModel:GetRoleHeadInfoByPhotoId(photo_id) if not photo_id then return end local tb = self:GetRoleHeadInfo() for k, data in pairs(tb) do if data.photo_id == photo_id then return data end end return nil end -- 获取玩家的职业和性别的转生默认头像 function NewMainRoleModel:GetRoleReinHeadInfo( ) if not self.role_rein_head_info then self.role_rein_head_info = {} local mainRoleVo = RoleManager:getInstance().mainRoleInfo local career = mainRoleVo.career local sex = mainRoleVo.sex -- local turn = mainRoleVo.turn local career_list for k, v in pairs(Config.Profilephoto) do career_list = stringtotable(v.career) for k2, v2 in ipairs(career_list) do if #career_list == 1 and v2 == career then -- 职业列表只有一个值,而且还是自己的职业 self.role_rein_head_info[#self.role_rein_head_info+1] = v break end end end end return DeepCopy(self.role_rein_head_info) end --获得玩家最大转生数(本来装备直接和转生相关 现在改额外逻辑了) function NewMainRoleModel:GetRoleReinMaxTurn( level) -- local role_rein_info = self:GetRoleReinHeadInfo() -- if role_rein_info then -- return TableSize(role_rein_info) -- end -- return 0 local level = level or RoleManager.Instance.mainRoleInfo.level local turn = 1--展示最高代 local really_turn = 0--当前真实代数 local list = {} for k,v in ipairs(Config.Equipmentseriesopen) do if v.visible_lv <= level and TaskModel:getInstance():IsTaskFinished(v.task_id) then turn = v.series > turn and v.series or turn list[k] = v end if v.open_lv <= level then really_turn = really_turn + 1 end end turn = EquipModel.getInstance():GetMaxSuitSeries() return turn,list,really_turn end -- 获取可激活头像的红点 function NewMainRoleModel:GetRoleHeadRed( ) local bool = false for k, v in pairs(self.role_head_status) do -- 如果已激活的称号中不存在该背包中的称号,则表示有称号可以激活 if v == 1 then bool = true break end end return bool end function NewMainRoleModel:RefreshRoleHeadRed( ) -- local red = self:GetRoleHeadRed() -- GlobalEventSystem:Fire(EventName.SHOW_FUNCTION_RED_POINT, 130, red) -- self:Fire(NewMainRoleModel.REFRESH_ROLE_HEAD_RED, red) end --活动经验基准 function NewMainRoleModel:GetRoleActivityBaseExp( ) if Config.Expbase[RoleManager.Instance.mainRoleInfo.level] then return Config.Expbase[RoleManager.Instance.mainRoleInfo.level].exp else return 0 end end -- 检查错误的玩家头像 function NewMainRoleModel:CheckErrorRoleHead( ) local photo_id = RoleManager.Instance.mainRoleInfo.profile_photo_id print("Saber:NewMainRoleModel [310] photo_id: ",photo_id) if photo_id == 0 then -- 头像为0不合法 local head_info = self:GetRoleReinHeadInfo() for k, v in pairs(head_info) do if v.turn == 0 then -- 当前职业的0转头像 print("Saber:NewMainRoleModel [316] v.photo_id: ",v.photo_id) GlobalEventSystem:Fire(EventName.REQ_CHANGE_ROLEHEAD, v.photo_id) -- 13090 break end end end end -- 登录时间查询协议 13087 function NewMainRoleModel:SetRoleLoginTimeData(req_time, last_login_time, cur_login_time, last_quit_time) self.login_time_data = {} self.login_time_data.req_time = req_time self.login_time_data.last_login_time = last_login_time self.login_time_data.cur_login_time = cur_login_time self.login_time_data.last_quit_time = last_quit_time self:UpdateTodayFirstLoginState() end function NewMainRoleModel:GetRoleLoginTimeData( ) return self.login_time_data end function NewMainRoleModel:UpdateTodayFirstLoginState( ) local last_zero_time = TimeUtil:GetFutureZeroStamp(0) if last_zero_time > self.login_time_data.last_login_time and self.login_time_data.cur_login_time > last_zero_time then self.is_today_first_login = true else self.is_today_first_login = false end end function NewMainRoleModel:IsTodayFirstLogin( ) return self.is_today_first_login end