local OfficialPrivilege_Model = {} local EventSystem = require('Event/EventSystem') local private = {} local official_privilege_pb = require("Proto/official_privilege_pb") local official_privilege_opt_pb = require("Proto/official_privilege_opt_pb") local CODE_NOT_ENOUGH = 2226 local inquireType = 0 OfficialPrivilege_Model.OptType = { Inquire = official_privilege_pb.Inquire, --请安 Strengthen = official_privilege_pb.Strengthen, --强身 Silence = official_privilege_pb.Silent, --禁言 Punishment = official_privilege_pb.Punishment, --问责 Promote = official_privilege_pb.Promote, --提拔 } OfficialPrivilege_Model.GetInquireTypeEnum = { Guild = 1, Friend = 2, Stranger = 3, } function OfficialPrivilege_Model.OnStartup() --各个职权类型的总数据 private.privilegeInfo = {} -- 各个职权类型的操作记录数据 private.privilegeRecord = {} NetManager.RegisterMsgCB(MessageEnums.MessageOfficialPrivilegeOpt, private.OfficialPrivilegeOptResponse) NetManager.RegisterMsgCB(MessageEnums.MessageOfficialPrivilegeGetOptRecord, private.OfficialPrivilegeGetOptRecordResponse) NetManager.RegisterMsgCB(MessageEnums.MessageOfficialStrengthen, private.OfficialStrengthenResponse) NetManager.RegisterMsgCB(MessageEnums.MessageOfficialGetInquireInfo, private.OfficialGetInquireInfoResp) end function OfficialPrivilege_Model.OnShutdown() end -- region 职权次数相关(使用次数、被使用次数) function OfficialPrivilege_Model.SyncPrivilegeInfo(info) if IsServerDataNotNil(info.inquireInfo) then private.privilegeInfo[OfficialPrivilege_Model.OptType.Inquire] = info.inquireInfo end if IsServerDataNotNil(info.strengthenInfo) then private.privilegeInfo[OfficialPrivilege_Model.OptType.Strengthen] = info.strengthenInfo end if IsServerDataNotNil(info.silenceInfo) then private.privilegeInfo[OfficialPrivilege_Model.OptType.Silence] = info.silenceInfo end if IsServerDataNotNil(info.punishmentInfo) then private.privilegeInfo[OfficialPrivilege_Model.OptType.Punishment] = info.punishmentInfo end if IsServerDataNotNil(info.promoteInfo) then private.privilegeInfo[OfficialPrivilege_Model.OptType.Promote] = info.promoteInfo end EventSystem.Dispatch(EventID.UI_RefreshOfficialPrivilegeInfo) CTL.OfficialPrivilege.CheckOfficialPrivilegeRedPoint() end -- 获取特权相关次数 -- infoNum XX(请安、强身、禁言、问责、提拔)已经使用次数,beInfoNum 被XX(请安、强身、禁言、问责、提拔)已经被使用次数 -- 都需要用总次数去减去使用次数 function OfficialPrivilege_Model.GetPrivilegeInfoNum(type) local infoNum, beInfoNum = 0, 0 local info = private.privilegeInfo[type] if not info then logging.error(LTAG.ERROR, "官职职权系统(OfficialPrivilege_Model.GetPrivilegeInfoNum) : 没有查到次数,默认返回使用次数、被使用次数最大值;type = ", type) local rightsData = DataSheetManager.OfficialRights:GetDataByRightsID(type) return rightsData.UseTimes, rightsData.UsedTimes -- 如果privilegeInfo中没有该数据则返回最大值 end if type == OfficialPrivilege_Model.OptType.Inquire then infoNum = info.inquireNum beInfoNum = info.beInquiredNum elseif type == OfficialPrivilege_Model.OptType.Strengthen then infoNum = info.strengthenNum elseif type == OfficialPrivilege_Model.OptType.Silence then infoNum = info.silenceNum beInfoNum = info.beSilentNum elseif type == OfficialPrivilege_Model.OptType.Punishment then infoNum = info.punishmentNum beInfoNum = info.bePunishmentNum elseif type == OfficialPrivilege_Model.OptType.Promote then infoNum = info.promoteNum beInfoNum = info.bePromoteNum end return infoNum, beInfoNum end -- endregion -- region 使用职权相关 -- 使用特权请求 function OfficialPrivilege_Model.OfficialPrivilegeOptRequest(optType, targetAcid) private.optType = optType local msg = official_privilege_opt_pb.OfficialPrivilegeOptReq() msg.optType = optType msg.targetAcid = targetAcid NetManager.SendMessage(MessageEnums.MessageOfficialPrivilegeOpt, msg) end function private.OfficialPrivilegeOptResponse(msgResp) if msgResp.Resp.Code == 0 then --CTL.OfficialPrivilege.ShowOfficialPrivilegeSuccess(msgResp.optType) EventSystem.Dispatch(EventID.UI_RefreshOfficialPrivilegeCurTab) elseif msgResp.Resp.Code == CODE_NOT_ENOUGH then -- 道具不足 CTL.OfficialPrivilege.ShowOfficialPrivilegeCostNotEnough(private.optType) end end -- endregion -- region 职权操作记录相关 -- 特权操作记录 function OfficialPrivilege_Model.OfficialPrivilegeGetOptRecordRequest() local msg = official_privilege_opt_pb.OfficialPrivilegeGetOptRecordReq() NetManager.SendMessage(MessageEnums.MessageOfficialPrivilegeGetOptRecord, msg) end local function PrivilegeRecordSort(a, b) return a.optTime > b.optTime end function private.OfficialPrivilegeGetOptRecordResponse(msgResp) if msgResp.Resp.Code == 0 then local index = 1 for i, v in ipairs(msgResp.records) do if v.optType ~= MDL.OfficialPrivilege.OptType.Strengthen then private.privilegeRecord[index] = v index = index + 1 end end for i = #private.privilegeRecord, index, -1 do table.remove(private.privilegeRecord, i) end table.sort(private.privilegeRecord, PrivilegeRecordSort) EventSystem.Dispatch(EventID.UI_RefreshOfficialPrivilegeGetOptRecord) end end function OfficialPrivilege_Model.GetOfficialPrivilegeGetOptRecord() return private.privilegeRecord end -- endregion -- region 职权-强身相关 -- 特权强身请求 function OfficialPrivilege_Model.OfficialStrengthenRequest(strengthenId) private.optType = OfficialPrivilege_Model.OptType.Strengthen local msg = official_privilege_opt_pb.OfficialStrengthenReq() msg.strengthenId = strengthenId NetManager.SendMessage(MessageEnums.MessageOfficialStrengthen, msg) end function private.OfficialStrengthenResponse(msgResp) if msgResp.Resp.Code == 0 then CTL.OfficialPrivilege.ShowOfficialPrivilegeSuccess(private.optType) end end function OfficialPrivilege_Model.OfficialGetInquireInfoReq(list, type) OfficialPrivilege_Model.SetInquireType(type) local msg = official_privilege_opt_pb.OfficialGetInquireInfoReq() for _, v in ipairs(list) do table.insert(msg.players, v) end NetManager.SendMessage(MessageEnums.MessageOfficialGetInquireInfo, msg) end function private.OfficialGetInquireInfoResp(msg) local beInquiredNumsTable = NetManager.ChangeProtoMapToLua(msg.beInquireNums) local inquireType = OfficialPrivilege_Model.GetInquireType() if inquireType == OfficialPrivilege_Model.GetInquireTypeEnum.Guild then OfficialPrivilege_Model.beInquiredNumsGuildList = beInquiredNumsTable EventSystem.Dispatch(EventID.UI_Guild_BeInquiredRefresh) elseif inquireType == OfficialPrivilege_Model.GetInquireTypeEnum.Friend then OfficialPrivilege_Model.beInquiredNumsFriendList = beInquiredNumsTable elseif inquireType == OfficialPrivilege_Model.GetInquireTypeEnum.Stranger then OfficialPrivilege_Model.beInquiredNumsStrangerList = beInquiredNumsTable EventSystem.Dispatch(EventID.UI_OfficialPrivilege_StangerRefresh) end end ------------------------------------------官职拜访相关-------------------------------- function OfficialPrivilege_Model.GetInquireType() return inquireType end function OfficialPrivilege_Model.SetInquireType(type) inquireType = type end -- endregion return OfficialPrivilege_Model