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
|