2360 lines
No EOL
85 KiB
Lua
2360 lines
No EOL
85 KiB
Lua
XGuildManagerCreator = function()
|
||
local XGuildManager = {}
|
||
local Json = require("XCommon/Json")
|
||
|
||
local GuildRpc = {
|
||
GuildCreate = "GuildCreateRequest", --创建公会请求
|
||
GuildApply = "GuildApplyRequest", --申请加入公会
|
||
GuildAckApply = "GuildAckApplyRequest", --审批加入公会
|
||
GuildRecruit = "GuildRecruitRequest", --公会招募请求
|
||
GuildListRecommend = "GuildListRecommendRequest", --获取公会推荐列表请求
|
||
GuildListDetail = "GuildListDetailRequest", --获取公会详情
|
||
GuildChangeIcon = "GuildChangeIconRequest", --更改公会头像
|
||
GuildChangeName = "GuildChangeNameRequest", --更改公会名称
|
||
GuildChangeDeclaration = "GuildChangeDeclarationRequest", --更换宣言
|
||
GuildChangeNotice = "GuildChangeNoticeRequest", --更换内部通讯
|
||
GuildChangeRankName = "GuildChangeRankNameRequest", --修改自定义职位
|
||
GuildReleaseWish = "GuildReleaseWishRequest", --发布心愿
|
||
GuildListWish = "GuildListWishRequest", --获取已发布心愿列表
|
||
GuildWishContribute = "GuildWishContributeRequest", --心愿捐献
|
||
GuildChangeRank = "GuildChangeRankRequest", --更换职位
|
||
GuildQuit = "GuildQuitRequest", --退出公会
|
||
GuildKickMember = "GuildKickMemberRequest", --公会踢人
|
||
GuildListNews = "GuildListNewsRequest", --获取公会动态
|
||
GuildGiveLike = "GuildGiveLikeRequest", --点赞
|
||
GuildImpeach = "GuildImpeachRequest", --弹劾
|
||
GuildChangeScript = "GuildChangeScriptRequest", --迎新语,检测屏蔽词
|
||
--GuildListScript = "GuildListScriptRequest", --获取当前自定义话术 暂时弃用
|
||
GuildRecruitRecommend = "GuildRecruitRecommendRequest", --获取招募推荐请求
|
||
GuildListRecruit = "GuildListRecruitRequest", --玩家查询发给自己的招募请求
|
||
GuildAckRecruit = "GuildAckRecruitRequest", --回应招募请求
|
||
GuildTourist = "GuildTouristRequest", --游客模式加入公会
|
||
GuildQuitTourist = "GuildQuitTouristRequest", --退出游客模式
|
||
GuildListApply = "GuildListApplyRequest", --获取公会申请者列表
|
||
GuildLevelUp = "GuildLevelUpRequest", --公会升级
|
||
GuildPayMaintain = "GuildPayMaintainRequest", --公会缴纳维护费用
|
||
GuildGetGift = "GuildGetGiftRequest", --公会获取活跃度礼包
|
||
GuildListChat = "GuildListChatRequest", --服务器聊天缓存请求
|
||
GuildChangeApplyOption = "GuildChangeApplyOptionRequest", --修改申请选项
|
||
GuildGetContributeReward = "GuildGetContributeRewardRequest", --领取上周贡献奖励
|
||
GuildMemberDetail = "GuildMemberDetailRequest", --获取公会成员信息
|
||
GuildListRank = "GuildListRankRequest", --公会排行榜
|
||
GuildFind = "GuildFindRequest", --公会搜索
|
||
GuildListTalent = "GuildListTalentRequest", --公会天赋列表
|
||
GuildUpgradeTalent = "GuildUpgradeTalentRequest", --公会天赋升级
|
||
}
|
||
local DataType = {
|
||
Int = 1,
|
||
String = 2,
|
||
}
|
||
XGuildManager.GuildFunctional = {
|
||
Info = 1,
|
||
Member = 2,
|
||
Challenge = 3,
|
||
Welfare = 4,
|
||
}
|
||
|
||
local GuildData = nil
|
||
|
||
local GuildMemberCount = 0
|
||
local GuildJoinCdEnd = 0
|
||
local CanImpeach = false
|
||
local HasImpeach = false
|
||
local GuildLastRank = {}
|
||
local GuildCurRank = {}
|
||
local EnterGuildRightAway = false
|
||
local TalentLevelCount = 0
|
||
|
||
local LastReqServeChatTime = 0
|
||
local TalentPoint = 0
|
||
local TalentLevels = {} -- id = level
|
||
--发布心愿,请求多少次。
|
||
local WishCount = 0
|
||
--发布心愿,捐赠了多少次。
|
||
local WishContributeCount = 0
|
||
-- 是否可以领取贡献奖励
|
||
local HasContributeReward = 0
|
||
-- 公会推荐招募页数
|
||
local RecommendPageNo = 0
|
||
-- 公会推荐招募数据
|
||
local RecommendPageData = {}
|
||
-- 发送过招募的玩家
|
||
local RecommendedPlayers = {}
|
||
--推荐公会数据
|
||
local GuildRecommendDatas = {}
|
||
--搜索公会数据
|
||
local GuildFindDatas = {}
|
||
--自定义话术数据
|
||
local GuildScriptListDatas = {}
|
||
local GuildScriptSelectedDatas = {}
|
||
--自定义话术
|
||
local GuildScriptAutoChat = nil
|
||
local GuildWelcomeWordKey = "GuildWelcomeWordKey"
|
||
local GuildWelcomeSelectKey = "GuildWelcomeSelectKey"
|
||
local GuildWelcomeAutoChatKey = "GuildWelcomeAutoChatKey"
|
||
-- 自定义职位名
|
||
local GuildCustomName = {}
|
||
--已发布心愿列表数据
|
||
local GuildWishListDatas = {}
|
||
--公会申请者数据
|
||
local GuildApplyListDatas = {}
|
||
local HasApplyMember = false
|
||
--玩家收到的招募数据
|
||
local GuildRecruitDatas = {}
|
||
--未加入公会时公会信息
|
||
local GuildVistorInfoDatas = {}
|
||
-- 排行榜
|
||
local GuildRankListDatas = {}
|
||
-- 公会动态相关
|
||
local GuildLogList = {}
|
||
local GuildLogMaxPage = {}
|
||
local GuildNewsCountPerPage = 0
|
||
-- 未加入公会前的邀请
|
||
local HasGuildRecruit = false
|
||
-- 公会免费改名机会(被强制改名后获得)
|
||
local FreeChangeGuildNameCount = 0
|
||
|
||
function XGuildManager.AsyncGuildData(notifyData)
|
||
if not notifyData then return end
|
||
HasContributeReward = notifyData.HasContributeReward
|
||
FreeChangeGuildNameCount = notifyData.FreeChangeGuildNameCount or 0
|
||
GuildData.GuildId = notifyData.GuildId
|
||
GuildData.GuildName = notifyData.GuildName
|
||
GuildData.GuildLevel = notifyData.GuildLevel
|
||
GuildData.GuildIconId = notifyData.IconId
|
||
GuildData.GuildRankLevel = notifyData.GuildRankLevel
|
||
GuildData.BossEndTime = notifyData.BossEndTime --工会boss结束时间,用于工会主页面显示倒计时
|
||
HasGuildRecruit = notifyData.HasRecruit
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_RECRUIT_LIST_CHANGED)
|
||
if XGuildManager.IsJoinGuild() then
|
||
XGuildManager.GetGuildDetails(0)
|
||
if EnterGuildRightAway == notifyData.GuildId then
|
||
EnterGuildRightAway = nil
|
||
XGuildManager.CloseAllAndEnterGuild()
|
||
end
|
||
-- 获取服务端公会频道缓存
|
||
XGuildManager.GuildListChat(function()
|
||
end)
|
||
|
||
-- 申请列表
|
||
if XGuildManager.IsGuildAdminister() then
|
||
XGuildManager.GetGuildListApply(function()
|
||
local applyList = XGuildManager.GetGuildApplyList()
|
||
if next(applyList) then
|
||
HasApplyMember = true
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_APPLY_LIST_CHANGED)
|
||
end
|
||
end)
|
||
end
|
||
-- 获取成员
|
||
local guildId = XGuildManager.GetGuildId()
|
||
XGuildManager.GetGuildMembers(guildId)
|
||
else
|
||
-- 未加入公会,清除自定义职位信息
|
||
GuildData:UpdateAllRankNames()
|
||
end
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_NOTICE)
|
||
end
|
||
|
||
function XGuildManager.AsyncGuildRankName(notifyData)
|
||
if not notifyData then return end
|
||
GuildData:UpdateAllRankNames(notifyData.AllRankName)
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_ALLRANKNAME_UPDATE)
|
||
end
|
||
|
||
-- 紧急维护状态更新
|
||
function XGuildManager.AsyncGuildMaintain(notifyData)
|
||
if not notifyData then return end
|
||
|
||
GuildData.MaintainState = notifyData.MaintainState
|
||
GuildData.EmergenceTime = notifyData.EmergenceTime
|
||
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_MAINTAIN_STATE_CHANGED)
|
||
end
|
||
|
||
-- 公会弹劾状态
|
||
function XGuildManager.AsyncGuildImpeach(notifyData)
|
||
if not notifyData then return end
|
||
-- notifyData.State 0正常、1可弹劾
|
||
CanImpeach = notifyData.State == 1
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_LEADER_DISSMISS)
|
||
end
|
||
|
||
-- 公会建设度更新
|
||
function XGuildManager.AsyncGuildEvent(notifyData)
|
||
if not notifyData then return end
|
||
local eventType = notifyData.Type
|
||
local eventValue = notifyData.Value
|
||
local eventValue2 = notifyData.Value2
|
||
local eventStr = notifyData.Str1
|
||
|
||
if XGuildConfig.GuildEventType.Build == eventType then
|
||
GuildData.Build = eventValue
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_BUILD_CHANGED)
|
||
elseif XGuildConfig.GuildEventType.Contribute == eventType then
|
||
GuildData.GuildContributeLeft = eventValue
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_CONTRIBUTE_CHANGED)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_CONTRIBUTE_CHANGED)
|
||
elseif XGuildConfig.GuildEventType.GiftContribute == eventType then
|
||
GuildData.GiftContribute = eventValue
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_GIFT_CONTRIBUTE_CHANGED)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_GIFT_CONTRIBUTE_CHANGED)
|
||
elseif XGuildConfig.GuildEventType.Level == eventType then
|
||
GuildData.GuildLevel = eventValue
|
||
local levelTemplate = XGuildConfig.GetGuildLevelDataBylevel(GuildData.GuildLevel)
|
||
GuildData.GuildMemberMaxCount = levelTemplate.Capacity
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_LEVEL_CHANGED)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_LEVEL_CHANGED)
|
||
elseif XGuildConfig.GuildEventType.ApplyChanged == eventType then
|
||
HasApplyMember = true
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_APPLY_LIST_CHANGED)
|
||
|
||
elseif XGuildConfig.GuildEventType.KickOut == eventType then
|
||
|
||
XDataCenter.ChatManager.DeleteGuildChat(GuildData.GuildId)
|
||
XDataCenter.GuildBossManager.ClearLog()
|
||
XDataCenter.GuildBossManager.ClearReward()
|
||
|
||
GuildData.GuildId = 0
|
||
GuildData.GiftGuildLevel = 0
|
||
|
||
if XPlayer.Id == eventValue then return end
|
||
if XLuaUiManager.IsUiLoad("UiGuildMain") or XLuaUiManager.IsUiLoad("UiGuildDormMain") then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("GuildKickOutByAdministor"))
|
||
if CS.XFight.Instance ~= nil then
|
||
return
|
||
end
|
||
if XHomeSceneManager.GetCurrentScene() ~= nil then
|
||
XHomeSceneManager.LeaveScene()
|
||
end
|
||
XLuaUiManager.RunMain()
|
||
end
|
||
-- if XLuaUiManager.IsUiLoad("UiGuildMain") then
|
||
-- XUiManager.TipMsg(CS.XTextManager.GetText("GuildKickOutByAdministor"))
|
||
-- if XLuaUiManager.IsUiShow("UiGuildMain") then
|
||
-- XLuaUiManager.Close("UiGuildMain")
|
||
-- end
|
||
-- end
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_GIFT_CONTRIBUTE_CHANGED)
|
||
elseif XGuildConfig.GuildEventType.ContributeReward == eventType then
|
||
HasContributeReward = eventValue
|
||
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_MEMBER_CONTRIBUTE_CONDITION)
|
||
|
||
elseif XGuildConfig.GuildEventType.WeeklyReset == eventType then
|
||
-- 清空周贡献
|
||
-- local allMember = XGuildManager.GetMemberList()
|
||
-- for _, member in pairs(allMember or {}) do
|
||
-- member.ContributeWeek = 0
|
||
-- end
|
||
|
||
if XGuildManager.IsJoinGuild() then
|
||
XGuildManager.GuildListChat(function()
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_WEEKLY_RESET)
|
||
end)
|
||
end
|
||
|
||
elseif XGuildConfig.GuildEventType.RankLevelChanged == eventType then
|
||
-- 重新请求最新消息,重现请求角色
|
||
local oldRankLevel = GuildData.GuildRankLevel
|
||
local needReq = oldRankLevel == XGuildConfig.GuildRankLevel.Leader or eventValue == XGuildConfig.GuildRankLevel.Leader
|
||
GuildData.GuildRankLevel = eventValue
|
||
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_RANKLEVEL_CHANGED)
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_RANKLEVEL_CHANGED)
|
||
if XLuaUiManager.IsUiLoad("UiGuildMain") then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("GuildRankLevelChangeNotify", XGuildManager.GetRankNameByLevel(GuildData.GuildRankLevel)))
|
||
if XGuildManager.IsGuildAdminister() then
|
||
XGuildManager.GetGuildListApply(function()
|
||
local applyList = XGuildManager.GetGuildApplyList()
|
||
if next(applyList) then
|
||
HasApplyMember = true
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_APPLY_LIST_CHANGED)
|
||
end
|
||
end)
|
||
else
|
||
HasApplyMember = false
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_APPLY_LIST_CHANGED)
|
||
end
|
||
|
||
if needReq then--更新
|
||
XGuildManager.GetGuildDetails(0, function()
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVNET_GUILD_LEADER_NAME_CHANGED)
|
||
end)
|
||
end
|
||
end
|
||
|
||
-- 假如会长->会员,其他->会长,更新成员
|
||
if XLuaUiManager.IsUiLoad("UiGuildRongyu") and needReq then
|
||
local guildId = XGuildManager.GetGuildId()
|
||
XGuildManager.GetGuildMembers(guildId, function()
|
||
XEventManager.DispatchEvent(XEventId.EVNET_GUILD_LEADER_CHANGED)
|
||
if XLuaUiManager.IsUiShow("UiPlayerInfo") then
|
||
XLuaUiManager.Close("UiPlayerInfo")
|
||
end
|
||
end)
|
||
end
|
||
|
||
if XLuaUiManager.IsUiShow("UiPlayerInfo") then
|
||
XLuaUiManager.Close("UiPlayerInfo")
|
||
end
|
||
elseif XGuildConfig.GuildEventType.Talent == eventType then
|
||
TalentLevels[eventValue] = eventValue2
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_TALENT_ASYNC)
|
||
elseif XGuildConfig.GuildEventType.TalentPoint == eventType then
|
||
TalentPoint = eventValue
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_TALENT_ASYNC)
|
||
elseif XGuildConfig.GuildEventType.MemberChanged == eventType then
|
||
GuildData.GuildMemberCount = eventValue
|
||
if XGuildManager.GetGuildScriptAutoChat() then
|
||
-- local username = eventStr
|
||
XGuildManager.SendGuildScript()
|
||
end
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_MEMBERCOUNT_CHANGED)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_MEMBERCOUNT_CHANGED)
|
||
elseif XGuildConfig.GuildEventType.Recruit == eventType then
|
||
HasGuildRecruit = true
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_RECRUIT_LIST_CHANGED)
|
||
elseif XGuildConfig.GuildEventType.GuildBossHpBox == eventType then
|
||
XDataCenter.GuildBossManager.SetBossHpReward(true)
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILDBOSS_HPBOX_CHANGED)
|
||
XDataCenter.GuildBossManager.UpdateGuildBossHp(eventValue, eventValue2)
|
||
elseif XGuildConfig.GuildEventType.GuildBossScoreBox == eventType then
|
||
XDataCenter.GuildBossManager.SetScoreReward(true)
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILDBOSS_SCOREBOX_CHANGED)
|
||
elseif XGuildConfig.GuildEventType.GuildBossWeeklyTask == eventType then
|
||
XDataCenter.GuildBossManager.SetGuildBossWeeklyTaskTime(eventValue)
|
||
elseif XGuildConfig.GuildEventType.FreeChangeName == eventType then
|
||
FreeChangeGuildNameCount = FreeChangeGuildNameCount + 1
|
||
end
|
||
end
|
||
|
||
function XGuildManager.Init()
|
||
if not GuildData then
|
||
GuildData = XGuildData.New()
|
||
end
|
||
GuildNewsCountPerPage = CS.XGame.Config:GetInt("GuildNewsCountPerPage")
|
||
end
|
||
|
||
function XGuildManager.IsInitGuildData()
|
||
return GuildData:IsInit()
|
||
end
|
||
|
||
--所在公会的职务
|
||
function XGuildManager.GetCurRankLevel()
|
||
return GuildData.GuildRankLevel
|
||
end
|
||
|
||
--所在公会的职务是否是管理层
|
||
function XGuildManager.IsGuildAdminister()
|
||
return GuildData:IsGuildAdministor()
|
||
end
|
||
|
||
-- 是否为会长
|
||
function XGuildManager.IsGuildLeader()
|
||
return GuildData:IsLeader()
|
||
end
|
||
|
||
--是否已经加入公会
|
||
function XGuildManager.IsJoinGuild()
|
||
return GuildData:IsJoinGuild()
|
||
end
|
||
|
||
--当前公会职位人数
|
||
function XGuildManager.GetMyGuildPosCount()
|
||
-- GetGuildPositionCurAmount
|
||
local data = GuildData:GetGuildMembers()
|
||
local level = XGuildManager.GetGuildLevel()
|
||
local amount = {}
|
||
for _, v in pairs(XGuildConfig.GuildRankLevel) do
|
||
amount[v] = amount[v] or 0
|
||
end
|
||
for _, v in pairs(data) do
|
||
amount[v.RankLevel] = amount[v.RankLevel] + 1
|
||
end
|
||
return amount
|
||
end
|
||
|
||
--当前公会职位容量
|
||
function XGuildManager.GetGuildPosCapacity(level, rank)
|
||
local rankLevel = XGuildConfig.GuildRankLevel
|
||
local guildLevelData = XGuildConfig.GetGuildLevelDataBylevel(level)
|
||
if not guildLevelData then
|
||
return
|
||
end
|
||
if rank == rankLevel.Leader then
|
||
return 1
|
||
elseif rank == rankLevel.CoLeader then
|
||
return guildLevelData.PositionNum[1]
|
||
elseif rank == rankLevel.Elder then
|
||
return guildLevelData.PositionNum[2]
|
||
elseif rank == rankLevel.Member then
|
||
return guildLevelData.Capacity
|
||
elseif rank == rankLevel.Tourist then
|
||
return guildLevelData.PositionNum[3]
|
||
end
|
||
end
|
||
|
||
-- 如果该玩家是在离线时被审批进入了公会,则重新上线前,Data.GuildDetail都不会更新信息,因此采用本地信息判断
|
||
function XGuildManager.CheckMemberOperatePermission(targetId)
|
||
local memberList = XDataCenter.GuildManager.GetMemberList()
|
||
local isAdministor = XDataCenter.GuildManager.IsGuildAdminister()
|
||
local myRankLevel = XDataCenter.GuildManager.GetCurRankLevel()
|
||
if memberList[targetId] then
|
||
local targetRankLevel = memberList[targetId].RankLevel
|
||
return targetRankLevel ~= nil and targetRankLevel > 0 and isAdministor and myRankLevel < targetRankLevel
|
||
end
|
||
return false
|
||
end
|
||
|
||
--当前心愿请求数
|
||
function XGuildManager.GetCurWishReqCount()
|
||
return WishCount
|
||
end
|
||
|
||
--累计当前心愿请求数
|
||
function XGuildManager.AddCurWishReqCount()
|
||
WishCount = WishCount + 1
|
||
end
|
||
|
||
--获取所有公会
|
||
function XGuildManager.GetCurGuildsInfo()
|
||
return {}
|
||
end
|
||
|
||
--获取今天已经捐赠次数
|
||
function XGuildManager.GetCurDonationCount()
|
||
return WishContributeCount
|
||
end
|
||
|
||
--累加今天已经捐赠次数
|
||
function XGuildManager.AddCurDonationCount()
|
||
WishContributeCount = WishContributeCount + 1
|
||
end
|
||
|
||
--获取总可捐赠次数
|
||
function XGuildManager.GetTotalDonationCount(level)
|
||
return XGuildConfig.GetGuildWishContributeMaxCountByLevel(level)
|
||
end
|
||
|
||
--判断此公会人数是否已经满
|
||
function XGuildManager.IsFullGuild(guildId)
|
||
local data = XGuildManager.GetVistorGuildDetailsById(guildId)
|
||
if not data then
|
||
return true
|
||
end
|
||
|
||
return data.GuildMemberMaxCount == data.GuildMemberCount
|
||
end
|
||
|
||
--判断此公会游客数量是否已经满
|
||
function XGuildManager.IsFullGuildVistor(guildId)
|
||
local data = XGuildManager.GetVistorGuildDetailsById(guildId)
|
||
if not data then
|
||
return true
|
||
end
|
||
|
||
return data.GuildTouristMaxCount == data.GuildTouristCount
|
||
end
|
||
|
||
--判断自己是不是游客
|
||
function XGuildManager.IsGuildTourist()
|
||
return XGuildManager.GetCurRankLevel() == XGuildConfig.GuildRankLevel.Tourist
|
||
end
|
||
|
||
--已经发布的心愿
|
||
function XGuildManager.GetGuildWishList()
|
||
return GuildWishListDatas
|
||
end
|
||
--处理公会推荐列表数据
|
||
-- int Id;
|
||
-- string Name;
|
||
-- int IconId;
|
||
-- int Level;
|
||
-- int MemberCount;
|
||
-- int MemberMaxCount;
|
||
-- int ContributeIn7Days;
|
||
function XGuildManager.HandleGuildRecommendDatas(pageNo, datas)
|
||
if datas ~= nil and next(datas) ~= nil then
|
||
GuildRecommendDatas[pageNo] = {}
|
||
for _, v in pairs(datas) do
|
||
if v and v.Id then
|
||
table.insert(GuildRecommendDatas[pageNo], v)
|
||
end
|
||
end
|
||
XGuildManager.RecordGuildRecommend(-1)
|
||
else
|
||
XGuildManager.RecordGuildRecommend(pageNo)
|
||
end
|
||
end
|
||
|
||
function XGuildManager.HandleGuildFindDatas(guildname, datas)
|
||
if datas ~= nil and next(datas) ~= nil then
|
||
GuildFindDatas[guildname] = {}
|
||
for _, v in pairs(datas) do
|
||
if v and v.Id then
|
||
table.insert(GuildFindDatas[guildname], v)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function XGuildManager.GetGuildFindDatas(guildname)
|
||
return GuildFindDatas[guildname] or {}
|
||
end
|
||
|
||
function XGuildManager.RecordGuildRecommend(pageNo)
|
||
XGuildManager.EmptyPageNo = pageNo
|
||
end
|
||
|
||
function XGuildManager.GetCurGuildRecommend()
|
||
return XGuildManager.EmptyPageNo
|
||
end
|
||
|
||
function XGuildManager.GetGuildRecommendDatas(pageNo)
|
||
|
||
local nextPageNo = pageNo + 1
|
||
if GuildRecommendDatas[pageNo] and not GuildRecommendDatas[nextPageNo] then
|
||
XDataCenter.GuildManager.GuildListRecommendRequest(nextPageNo, function()
|
||
end)
|
||
end
|
||
|
||
return GuildRecommendDatas[pageNo] or {}
|
||
end
|
||
|
||
function XGuildManager.ResetGuildRecommendDatas()
|
||
GuildRecommendDatas = {}
|
||
end
|
||
|
||
function XGuildManager.IsNeedRequestRecommendData()
|
||
if not next(GuildRecommendDatas) then
|
||
return true
|
||
end
|
||
if XTime.GetServerNowTimestamp() - XGuildManager.PreRequestRecommendTime > XGuildConfig.GuildRequestRecommandTime then
|
||
return true
|
||
end
|
||
|
||
return false
|
||
end
|
||
|
||
function XGuildManager.ResetPreRequestRecommendTime()
|
||
XGuildManager.PreRequestRecommendTime = 0
|
||
end
|
||
|
||
function XGuildManager.IsNeedRequestRank()
|
||
if not next(GuildRankListDatas) then
|
||
return true
|
||
end
|
||
|
||
if XTime.GetServerNowTimestamp() - XGuildManager.PreRequestGuildListRankTime > XGuildConfig.GuildRequestRankTime then
|
||
return true
|
||
end
|
||
|
||
return false
|
||
end
|
||
|
||
-- 随机发送迎新语
|
||
function XGuildManager.SendGuildScript()
|
||
math.randomseed(os.time())
|
||
local chatData = {}
|
||
chatData.ChannelType = ChatChannelType.Guild
|
||
chatData.MsgType = ChatMsgType.Normal
|
||
chatData.TargetIds = {}
|
||
chatData.TargetIds[1] = XGuildManager.GetGuildId()
|
||
local welcome = XGuildManager.GetGuildScriptSelectedDatas()
|
||
if #welcome == 0 then return end
|
||
local content = welcome[math.random(#welcome)]
|
||
chatData.Content = content
|
||
XDataCenter.ChatManager.SendChat(chatData)
|
||
end
|
||
|
||
--处理已发布心愿列表数据
|
||
-- string Name;
|
||
-- int HeadPortraitId;
|
||
-- int RankLevel;
|
||
-- int ItemId;
|
||
-- int GotCount;
|
||
-- int MaxCount;
|
||
-- int Seq;
|
||
function XGuildManager.HandleListWishDatas(wishesData, wishCount, wishContributeCount)
|
||
GuildWishListDatas = {}
|
||
if wishesData ~= nil and next(wishesData) ~= nil then
|
||
for _, v in pairs(wishesData) do
|
||
if v and v.Id then
|
||
if XPlayer.Id ~= v.Id then
|
||
table.insert(GuildWishListDatas, v)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
WishCount = wishCount
|
||
WishContributeCount = wishContributeCount
|
||
end
|
||
|
||
function XGuildManager.HandleListRankDatas(type, tabledata, myRankNum)
|
||
GuildRankListDatas[type] = {}
|
||
local rankFromList = nil
|
||
if not (tabledata and next(tabledata)) then return end
|
||
for index, v in ipairs(tabledata) do
|
||
if v and v.GuildId then
|
||
if GuildData.GuildId == v.GuildId then
|
||
rankFromList = index
|
||
end
|
||
v.RankNum = index
|
||
v.Type = type
|
||
table.insert(GuildRankListDatas[type], v)
|
||
end
|
||
end
|
||
-- 如果榜单中有则优先用榜单的排名
|
||
if rankFromList then
|
||
GuildData.GuildRank[type] = rankFromList
|
||
-- 如果服务端没有,则本地只能显示百分比
|
||
elseif myRankNum > 0 and myRankNum < 1 then
|
||
GuildData.GuildRank[type] = (math.floor(myRankNum * 10000) / 10000)
|
||
else
|
||
GuildData.GuildRank[type] = 0
|
||
end
|
||
end
|
||
|
||
function XGuildManager.GetMyGuildRank(type)
|
||
return GuildData.GuildRank[type] or 0
|
||
end
|
||
|
||
function XGuildManager.GetMyGuildLastRank(type)
|
||
if not GuildLastRank[type] then
|
||
GuildLastRank[type] = XGuildManager.GetGuildPrefs(XGuildConfig.KEY_LAST_RANK..type, nil, DataType.String)
|
||
end
|
||
if not GuildLastRank[type] then
|
||
return 0
|
||
end
|
||
local strTable = string.Split(GuildLastRank[type], '_')
|
||
local lastDate, lastRank = strTable[1], strTable[2]
|
||
return tonumber(lastRank) or 0
|
||
end
|
||
|
||
function XGuildManager.SaveMyGuildCurRank(type)
|
||
local date = os.date("%Y%m%d")
|
||
local oldCurRank = XGuildManager.GetGuildPrefs(XGuildConfig.KEY_CUR_RANK..type, nil, DataType.String)
|
||
local strTable = string.Split(oldCurRank, '_')
|
||
local lastDate = strTable[1] or date
|
||
-- 已经是旧数据了,需要赋给GuildLastRank
|
||
if next(strTable) and tonumber(lastDate) < tonumber(date) then
|
||
GuildLastRank[type] = oldCurRank
|
||
XGuildManager.SaveGuildPrefs(XGuildConfig.KEY_LAST_RANK..type, GuildLastRank[type], DataType.String)
|
||
end
|
||
GuildCurRank[type] = string.format( "%s_%.4f", date, XGuildManager.GetMyGuildRank(type))
|
||
XGuildManager.SaveGuildPrefs(XGuildConfig.KEY_CUR_RANK..type, GuildCurRank[type], DataType.String)
|
||
end
|
||
|
||
function XGuildManager.GetListRankDatas(order)
|
||
return GuildRankListDatas[order]
|
||
end
|
||
|
||
function XGuildManager.EnterGuild(onEnterGuildCb)
|
||
if not XDataCenter.GuildManager.IsJoinGuild() then
|
||
if XGuildManager.IsNeedRequestRecommendData() then
|
||
XDataCenter.GuildManager.GuildListRecommendRequest(1, function()
|
||
XLuaUiManager.Open("UiGuildRecommendation")
|
||
end)
|
||
else
|
||
XLuaUiManager.Open("UiGuildRecommendation")
|
||
end
|
||
return
|
||
end
|
||
|
||
if XGuildManager.IsGuildTourist() then
|
||
XDataCenter.GuildManager.GetVistorGuildDetailsReq(GuildData.GuildId, function()
|
||
XLuaUiManager.Open("UiGuildVistor")
|
||
end)
|
||
else
|
||
XDataCenter.GuildManager.GetGuildDetails(0, function()
|
||
XLuaUiManager.Open("UiGuildMain")
|
||
if onEnterGuildCb then
|
||
onEnterGuildCb()
|
||
end
|
||
end)
|
||
end
|
||
end
|
||
|
||
-- 用于在未进公会界面前获取公会数据,如已有数据则不再获取
|
||
function XGuildManager.RequestGuildData()
|
||
if not XDataCenter.GuildManager.IsJoinGuild() then return end
|
||
if not XGuildManager.IsInitGuildData() then
|
||
XDataCenter.GuildManager.GetGuildDetails(0)
|
||
end
|
||
end
|
||
|
||
function XGuildManager.CloseAllAndEnterGuild()
|
||
XDataCenter.GuildManager.GetGuildDetails(0, function()
|
||
local topUiName = XLuaUiManager.GetTopUiName()
|
||
XDataCenter.GuildDormManager.EnterGuildDorm(nil, nil, function()
|
||
XLuaUiManager.Remove(topUiName)
|
||
XLuaUiManager.Remove("UiGuildRecommendation")
|
||
end)
|
||
end)
|
||
end
|
||
|
||
|
||
function XGuildManager.EnterGuildTalent()
|
||
if XGuildManager.CheckAllTalentLevelMax() then
|
||
XDataCenter.GuildManager.GetGuildDetails(0, function()
|
||
XLuaUiManager.Open("UiGuildGloryLevel")
|
||
end)
|
||
else
|
||
XGuildManager.GuildTalentListReq(function()
|
||
XLuaUiManager.Open("UiGuildSkill")
|
||
end)
|
||
end
|
||
end
|
||
|
||
function XGuildManager.HandleGuildListRecruitDatas(datas)
|
||
GuildRecruitDatas = {}
|
||
if datas ~= nil and next(datas) ~= nil then
|
||
for _, v in pairs(datas) do
|
||
if v.PlayerId and v.PlayerId ~= XPlayer.Id then
|
||
table.insert(GuildRecruitDatas, v)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function XGuildManager.GetGuildListRecruitDatas()
|
||
return GuildRecruitDatas
|
||
end
|
||
|
||
function XGuildManager.IsNeedRequestRecruitData()
|
||
if not next(GuildRecruitDatas) then
|
||
return true
|
||
end
|
||
|
||
if XTime.GetServerNowTimestamp() - XGuildManager.PreRequestRecruitTime > XGuildConfig.GuildRequestRecruitTime then
|
||
return true
|
||
end
|
||
|
||
return false
|
||
end
|
||
|
||
--游客模式退出后,清掉。
|
||
function XGuildManager.QuitVistorClean()
|
||
XGuildManager.ClearVistorGuildMembers(GuildData.GuildId)
|
||
GuildData.GuildId = 0
|
||
end
|
||
|
||
-- RPC
|
||
--获取招募推荐请求
|
||
function XGuildManager.GuildRecruitRecommendRequest(pageNo, cb)
|
||
XNetwork.Call(GuildRpc.GuildRecruitRecommend, { PageNo = pageNo }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
for _, recruitInfo in pairs(res.RecommendData or {}) do
|
||
if not RecommendedPlayers[recruitInfo.PlayerId] then
|
||
RecommendPageData[recruitInfo.PlayerId] = recruitInfo
|
||
end
|
||
end
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 随机出count个推荐招募,不在ownList中
|
||
function XGuildManager.GetRandomRecommendPlayers()
|
||
|
||
local randomRecommend = {}
|
||
local playerIdList = {}
|
||
local availableCount = 0
|
||
local availableRecommend = {}
|
||
for id, recruitInfo in pairs(RecommendPageData) do
|
||
if not RecommendedPlayers[id] then
|
||
table.insert(playerIdList, id)
|
||
availableCount = availableCount + 1
|
||
availableRecommend[id] = recruitInfo
|
||
end
|
||
end
|
||
|
||
if availableCount <= XGuildConfig.RecommendCount then
|
||
return availableRecommend
|
||
end
|
||
-- 需要随机:随机次数尽量少
|
||
math.randomseed(os.time())
|
||
local randomCount = XGuildConfig.RecommendCount
|
||
local leftCount = availableCount - XGuildConfig.RecommendCount
|
||
local leftPlayers = {}
|
||
if leftCount <= XGuildConfig.RecommendCount then
|
||
while (leftCount > 0) do
|
||
local index = math.random(1, availableCount)
|
||
local playerId = playerIdList[index]
|
||
if not leftPlayers[playerId] then
|
||
leftPlayers[playerId] = true
|
||
leftCount = leftCount - 1
|
||
end
|
||
end
|
||
for id, recruitInfo in pairs(availableRecommend) do
|
||
if not leftPlayers[id] then
|
||
randomRecommend[id] = recruitInfo
|
||
end
|
||
end
|
||
return randomRecommend
|
||
else
|
||
while (randomCount > 0) do
|
||
local randomLength = availableCount - (XGuildConfig.RecommendCount - randomCount)
|
||
local index = math.random(1, randomLength)
|
||
local playerId = playerIdList[index]
|
||
if not randomRecommend[playerId] then
|
||
randomRecommend[playerId] = availableRecommend[playerId]
|
||
randomCount = randomCount - 1
|
||
-- 随机到的、跟最后一个调换位置
|
||
local temp = playerIdList[randomLength]
|
||
playerIdList[index] = temp
|
||
playerIdList[randomLength] = playerId
|
||
end
|
||
end
|
||
return randomRecommend
|
||
end
|
||
end
|
||
|
||
--玩家查询发给自己的招募请求
|
||
function XGuildManager.GuildListRecruitRequest(cb)
|
||
if XGuildManager.IsNeedRequestRecruitData() then
|
||
XNetwork.Call(GuildRpc.GuildListRecruit, {}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
XGuildManager.PreRequestRecruitTime = XTime.GetServerNowTimestamp()
|
||
XGuildManager.HandleGuildListRecruitDatas(res.Data)
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
else
|
||
if cb then
|
||
cb()
|
||
end
|
||
end
|
||
end
|
||
|
||
--回应招募请求
|
||
function XGuildManager.GuildAckRecruitRequest(guildId, isAgree, playerId, cb)
|
||
if not guildId or guildId <= 0 or isAgree == nil then
|
||
XLog.Error("XGuildManager.GuildAckRecruitRequest参数错误: 参数guildId是 " .. tostring(guildId) .. " 参数isAgree是" .. tostring(isAgree))
|
||
return
|
||
end
|
||
|
||
XNetwork.Call(GuildRpc.GuildAckRecruit, { GuildId = guildId, IsAgree = isAgree }, function(res)
|
||
local removeIndex = -1
|
||
for k, v in pairs(GuildRecruitDatas or {}) do
|
||
if v.PlayerId == playerId and v.GuildId == guildId then
|
||
removeIndex = k
|
||
break
|
||
end
|
||
end
|
||
|
||
if removeIndex ~= -1 then
|
||
table.remove(GuildRecruitDatas, removeIndex)
|
||
end
|
||
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
if cb then
|
||
cb()
|
||
end
|
||
return
|
||
end
|
||
|
||
if isAgree then
|
||
XGuildManager.CloseAllAndEnterGuild()
|
||
end
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--游客模式加入公会
|
||
function XGuildManager.GuildTouristRequest(guildId, cb)
|
||
if not guildId or guildId <= 0 then
|
||
XLog.Error("XGuildManager.GuildTouristRequest参数错误: 参数guildId是空或者guildId小于等于0, 参数guildId:" .. tostring(guildId))
|
||
return
|
||
end
|
||
|
||
XNetwork.Call(GuildRpc.GuildTourist, { GuildId = guildId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
GuildData.GuildId = guildId
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--退出游客模式
|
||
function XGuildManager.GuildQuitTouristRequest(cb)
|
||
XNetwork.Call(GuildRpc.GuildQuitTourist, {}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--发布心愿
|
||
function XGuildManager.PublishWishRequest(itemId, cb)
|
||
if not itemId then
|
||
XLog.Error("XGuildManager.PublishWishRequest参数错误: 参数itemId是空")
|
||
return
|
||
end
|
||
|
||
XNetwork.Call(GuildRpc.GuildReleaseWish, { ItemId = itemId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
XGuildManager.AddCurWishReqCount()
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--捐赠
|
||
function XGuildManager.DonateRequest(playerId, seq, itemId, cb)
|
||
XNetwork.Call(GuildRpc.GuildWishContribute, { PlayerId = playerId, Seq = seq, ItemId = itemId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
XGuildManager.AddCurDonationCount()
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--创建公会
|
||
function XGuildManager.BuildGuildRequest(guildName, guildDeclaration, iconId, cb)
|
||
XNetwork.Call(GuildRpc.GuildCreate, {
|
||
GuildName = guildName,
|
||
GuildDeclaration = guildDeclaration,
|
||
IconId = iconId
|
||
}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
local needDispatch, name, declaration = false
|
||
if res.GuildName ~= nil and res.GuildName ~= "" then
|
||
name = res.GuildName
|
||
needDispatch = true
|
||
end
|
||
|
||
if res.GuildDeclaration ~= nil and res.GuildDeclaration ~= "" then
|
||
declaration = res.GuildDeclaration
|
||
needDispatch = true
|
||
end
|
||
|
||
if needDispatch then
|
||
name = name or guildName
|
||
declaration = declaration or guildDeclaration
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_FILTER_FINISH, name, declaration)
|
||
end
|
||
return
|
||
end
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--v1.28 创建工会功能前置条件判断
|
||
function XGuildManager.CheckBuildGuild()
|
||
local conditionIds = XGuildConfig.GetCreateConditionals()
|
||
for _, id in ipairs(conditionIds) do
|
||
if not XConditionManager.CheckCondition(id) then
|
||
return id
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
|
||
-- 获取公会详情GuildId = 0表示本公会
|
||
function XGuildManager.GetGuildDetails(guild, cb)
|
||
XNetwork.Call(GuildRpc.GuildListDetail, { GuildId = guild }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
GuildData:UpdateGuildData(res)
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
function XGuildManager.GetVistorGuildDetailsReq(guildId, cb)
|
||
XNetwork.Call(GuildRpc.GuildListDetail, { GuildId = guildId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
if not GuildVistorInfoDatas[res.GuildId] then
|
||
GuildVistorInfoDatas[res.GuildId] = XGuildVistorData.New()
|
||
end
|
||
|
||
GuildVistorInfoDatas[res.GuildId]:UpdateGuildData(res)
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
function XGuildManager.GetVistorGuildDetailsById(guildId)
|
||
return GuildVistorInfoDatas[guildId]
|
||
end
|
||
|
||
function XGuildManager.GetVistorMemberList(guildId)
|
||
return GuildVistorInfoDatas[guildId]:GetMemberList()
|
||
end
|
||
|
||
function XGuildManager.IsHaveVistorGuildDetailsById(guildId)
|
||
if not GuildVistorInfoDatas[guildId] then
|
||
return false
|
||
end
|
||
|
||
return GuildVistorInfoDatas[guildId]:IsHaveVistorGuildDetailsById()
|
||
end
|
||
|
||
-- 自定义职位
|
||
function XGuildManager.ChangeRankName(allRankNames, cb)
|
||
XNetwork.Call(GuildRpc.GuildChangeRankName, { AllRankName = allRankNames }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
GuildData:UpdateAllRankNames(allRankNames)
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 变更职位
|
||
function XGuildManager.GuildChangeRank(playerId, rankId, cb)
|
||
XNetwork.Call(GuildRpc.GuildChangeRank,
|
||
{
|
||
PlayerId = playerId,
|
||
NewRank = rankId
|
||
}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
local members = GuildData:GetGuildMembers()
|
||
if members and members[playerId] then
|
||
members[playerId].RankLevel = rankId
|
||
-- 通知刷新
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_UPDATE_MEMBER_INFO)
|
||
end
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 退出公会
|
||
function XGuildManager.QuitGuild(cb)
|
||
local lastGuildId = GuildData.GuildId
|
||
local tempLevel = XGuildManager.GetGuildLevel()
|
||
XGuildManager.SaveGuildLevel(-1)
|
||
if XDataCenter.GuildWarManager.CheckActivityIsInTime() and XDataCenter.GuildWarManager.CheckRoundIsInTime() then
|
||
local memberList = XGuildManager.GetMemberList()
|
||
local onlyOneMember = true
|
||
local memberCount = 0
|
||
for _, _ in pairs(memberList or {}) do
|
||
memberCount = memberCount + 1
|
||
if memberCount > 1 then
|
||
onlyOneMember = false
|
||
break
|
||
end
|
||
end
|
||
if onlyOneMember then
|
||
XUiManager.TipText("GuildWarCantGiveUpGuild")
|
||
return
|
||
end
|
||
end
|
||
XNetwork.Call(GuildRpc.GuildQuit, {}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XGuildManager.SaveGuildLevel(tempLevel)
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
XDataCenter.ChatManager.DeleteGuildChat(lastGuildId)
|
||
XDataCenter.GuildBossManager.ClearLog()
|
||
XDataCenter.GuildBossManager.ClearReward()
|
||
XGuildManager.ClearLog()
|
||
GuildData.GuildId = 0
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--修改公会头像
|
||
function XGuildManager.GuildChangeIconRequest(iconid, cb)
|
||
XNetwork.Call(GuildRpc.GuildChangeIcon, { IconId = iconid }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
GuildData.GuildIconId = iconid
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_DATA_CHANGED)
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 修改公会名称
|
||
function XGuildManager.GuildChangeName(name, func)
|
||
XNetwork.Call(GuildRpc.GuildChangeName, { Name = name }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
if res.Name ~= nil and res.Name ~= "" then
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_FILTER_FINISH, res.Name)
|
||
end
|
||
return
|
||
end
|
||
GuildData.GuildName = name
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_DATA_CHANGED)
|
||
if func then
|
||
func()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 修改宣言
|
||
function XGuildManager.GuildChangeDeclaration(delaration, func)
|
||
XNetwork.Call(GuildRpc.GuildChangeDeclaration, { Delaration = delaration }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
if res.Delaration ~= nil and res.Delaration ~= "" then
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_FILTER_FINISH, res.Delaration)
|
||
end
|
||
return
|
||
end
|
||
GuildData.GuildDeclaration = delaration
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_DATA_CHANGED)
|
||
if func then
|
||
func()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 修改内部通讯
|
||
function XGuildManager.GuildChangeNotice(notice, func)
|
||
XNetwork.Call(GuildRpc.GuildChangeNotice, { Notice = notice }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
if res.Notice ~= nil and res.Notice ~= "" then
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_FILTER_FINISH, res.Notice)
|
||
end
|
||
return
|
||
end
|
||
GuildData.GuildInterCom = notice
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_DATA_CHANGED)
|
||
if func then
|
||
func()
|
||
end
|
||
end)
|
||
end
|
||
|
||
|
||
-- 获取公会成员信息
|
||
function XGuildManager.GetGuildMembers(guildId, func)
|
||
XNetwork.Call(GuildRpc.GuildMemberDetail, { GuildId = guildId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
CanImpeach = res.CanImpeach
|
||
HasImpeach = res.HasImpeach
|
||
|
||
local MemberCount = 0
|
||
for _, _ in pairs(res.MembersData or {}) do
|
||
MemberCount = MemberCount + 1
|
||
end
|
||
GuildData:UpdateGuildMembers(res.MembersData, MemberCount)
|
||
|
||
-- 人数变化,相同界面使用这个事件
|
||
if MemberCount > GuildMemberCount then
|
||
GuildMemberCount = MemberCount
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_UPDATE_MEMBER_INFO)
|
||
end
|
||
-- 检查会长罢免
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_LEADER_DISSMISS)
|
||
-- 检查成员在线人数
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_MEMBERCOUNT_CHANGED)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_MEMBERCOUNT_CHANGED)
|
||
if func then
|
||
func()
|
||
end
|
||
end)
|
||
|
||
end
|
||
|
||
-- 获取公会成员信息(游客)
|
||
function XGuildManager.GetVistorGuildMembers(guildId, func)
|
||
XNetwork.Call(GuildRpc.GuildMemberDetail, { GuildId = guildId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
if not GuildVistorInfoDatas[guildId] then
|
||
GuildVistorInfoDatas[guildId] = XGuildVistorData.New()
|
||
end
|
||
|
||
GuildVistorInfoDatas[guildId]:UpdateGuildMembers(res.MembersData)
|
||
if func then
|
||
func()
|
||
end
|
||
end)
|
||
|
||
end
|
||
-- 申请加入公会的列表
|
||
function XGuildManager.GetGuildListApply(cb)
|
||
XNetwork.Call(GuildRpc.GuildListApply, {}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
GuildApplyListDatas = {}
|
||
for _, v in pairs(res.Data or {}) do
|
||
GuildApplyListDatas[v.PlayerId] = v
|
||
end
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 点赞
|
||
function XGuildManager.GuildGiveLike(playerId, itemId, itemCount, cb)
|
||
XNetwork.Call(GuildRpc.GuildGiveLike,
|
||
{
|
||
OtherId = playerId,
|
||
ItemId = itemId,
|
||
ItemCount = itemCount
|
||
}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 弹劾会长
|
||
function XGuildManager.GuildImpeachLeader(cb)
|
||
XNetwork.Call(GuildRpc.GuildImpeach, {}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 公会升级
|
||
function XGuildManager.GuildLevelUp(cb)
|
||
XNetwork.Call(GuildRpc.GuildLevelUp, {}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 缴纳维护费用
|
||
function XGuildManager.GuildPayMaintain(cb)
|
||
XNetwork.Call(GuildRpc.GuildPayMaintain, {}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
GuildData.MaintainState = XGuildConfig.GuildMaintainState.Normal
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
function XGuildManager.GetGuildLogListByType(type)
|
||
if not GuildLogList[type] then
|
||
GuildLogList[type] = {}
|
||
end
|
||
return GuildLogList[type]
|
||
end
|
||
|
||
function XGuildManager.GetGuildLogMaxPage(type)
|
||
return GuildLogMaxPage[type] or 0
|
||
end
|
||
|
||
function XGuildManager.ClearLog()
|
||
GuildLogList = {}
|
||
GuildLogMaxPage = {}
|
||
end
|
||
|
||
-- 获取公会动态
|
||
function XGuildManager.GetGuildListNews(newsType, pageNo, cb)
|
||
XNetwork.Call(GuildRpc.GuildListNews,
|
||
{
|
||
NewsType = newsType,
|
||
PageNo = pageNo
|
||
}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
-- 记录公会动态信息
|
||
local logList = XGuildManager.GetGuildLogListByType(newsType)
|
||
if pageNo <= 0 then
|
||
pageNo = res.MaxPageNo
|
||
GuildLogMaxPage[newsType] = res.MaxPageNo
|
||
end
|
||
for k, v in ipairs(res.News or {}) do
|
||
-- 首先请求最后一页(pageNo为0),获得最大页数后循环-1获取列表
|
||
local index = (pageNo - 1) * GuildNewsCountPerPage + k
|
||
logList[index] = v
|
||
end
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 公会活跃度礼包
|
||
function XGuildManager.GuildGetGift(giftLevel, cb)
|
||
XNetwork.Call(GuildRpc.GuildGetGift, { GiftLevel = giftLevel}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
GuildData.GiftLevelGot[giftLevel] = true
|
||
local giftGuildLevel = GuildData.GiftGuildLevel
|
||
local giftData = XGuildConfig.GetGuildGiftByGuildLevelAndGiftLevel(giftGuildLevel, giftLevel)
|
||
if giftData and giftData.GiftReward then
|
||
local rewardList = XRewardManager.GetRewardList(giftData.GiftReward)
|
||
if rewardList then
|
||
XUiManager.OpenUiObtain(rewardList)
|
||
end
|
||
end
|
||
if cb then
|
||
cb()
|
||
end
|
||
-- 触发更新
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_GIFT_CONTRIBUTE_CHANGED)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_GUILD_GIFT_CONTRIBUTE_CHANGED)
|
||
end)
|
||
end
|
||
|
||
-- 修改申请设置
|
||
function XGuildManager.GuildChangeApplyOption(option, minLevel, func)
|
||
XNetwork.Call(GuildRpc.GuildChangeApplyOption,
|
||
{ Option = option, MinLevel = minLevel }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
GuildData.Option = option
|
||
GuildData.MinLevel = minLevel
|
||
|
||
if func then
|
||
func()
|
||
end
|
||
|
||
end)
|
||
end
|
||
|
||
-- 领取上周贡献奖励
|
||
function XGuildManager.GuildGetContributeReward(func)
|
||
XNetwork.Call(GuildRpc.GuildGetContributeReward,
|
||
{}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
HasContributeReward = 0
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_MEMBER_CONTRIBUTE_CONDITION)
|
||
|
||
local list = {}
|
||
table.insert(list, XRewardManager.CreateRewardGoodsByTemplate({ TemplateId = XGuildConfig.GuildCoin, Count = res.AddGuildCoin }))
|
||
XUiManager.OpenUiObtain(list)
|
||
|
||
if func then
|
||
func()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 获取服务器聊天缓存
|
||
function XGuildManager.GuildListChat(cb)
|
||
-- 限制频繁操作
|
||
local curTime = XTime.GetServerNowTimestamp()
|
||
if curTime - LastReqServeChatTime < 5 then
|
||
return
|
||
end
|
||
LastReqServeChatTime = curTime
|
||
|
||
XNetwork.Call(GuildRpc.GuildListChat, {}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
local chatCache = {}
|
||
for i = 1, #res.ChatList do
|
||
local chatJson = Json.decode(res.ChatList[i])
|
||
local chatData = XChatData.New(chatJson)
|
||
-- local chatData = XChatData.New()
|
||
-- chatData.SenderId = chatJson.SenderId
|
||
-- chatData.TargetId = chatJson.TargetId
|
||
-- chatData.CreateTime = chatJson.CreateTime
|
||
-- chatData.Content = chatJson.Content
|
||
-- chatData.MsgType = chatJson.MsgType
|
||
-- chatData.MessageId = chatJson.MessageId
|
||
-- chatData.Icon = chatJson.Icon
|
||
-- chatData.CustomContent = chatJson.CustomContent
|
||
-- chatData.NickName = chatJson.NickName
|
||
table.insert(chatCache, 1, chatData)
|
||
end
|
||
-- 初始化客户端信息
|
||
XDataCenter.ChatManager.InitLocalCacheGuildChatContent()
|
||
|
||
-- 服务端,客户端消息合并
|
||
XDataCenter.ChatManager.MergeClientAndServerGuildChat(chatCache)
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 会长向玩家发出招募
|
||
function XGuildManager.GuildRecruit(playerId, cb, notRecord)
|
||
XNetwork.Call(GuildRpc.GuildRecruit, { PlayId = playerId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
if not notRecord then
|
||
RecommendedPlayers[playerId] = true
|
||
end
|
||
-- 招募发出成功
|
||
if cb then
|
||
cb()
|
||
end
|
||
return
|
||
end
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("GuildHasSendRecruit"))
|
||
if not notRecord then
|
||
RecommendedPlayers[playerId] = true
|
||
end
|
||
-- 招募发出成功
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--申请加入公会
|
||
function XGuildManager.ApplyToJoinGuildRequest(guildId, cb)
|
||
XNetwork.Call(GuildRpc.GuildApply, { GuildId = guildId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
if cb then
|
||
cb()
|
||
end
|
||
if res.IsPass == true then
|
||
EnterGuildRightAway = guildId
|
||
if guildId == XGuildManager.GetGuildId() then
|
||
XGuildManager.CloseAllAndEnterGuild()
|
||
end
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 拒绝成员加入公会
|
||
function XGuildManager.RefuseGuildRequest(playId, cb)
|
||
XNetwork.Call(GuildRpc.GuildAckApply, { PlayId = playId, IsAgree = false }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
|
||
GuildApplyListDatas[playId] = nil
|
||
if cb then
|
||
cb()
|
||
end
|
||
return
|
||
end
|
||
|
||
GuildApplyListDatas[playId] = nil
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--同意成员加入公会
|
||
function XGuildManager.AcceptGuildRequest(playId, playerName, cb)
|
||
XNetwork.Call(GuildRpc.GuildAckApply, { PlayId = playId, IsAgree = true }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
GuildApplyListDatas[playId] = nil
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
return
|
||
end
|
||
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("GuildAcceptSucceed", playerName))
|
||
GuildApplyListDatas[playId] = nil
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 公会踢人
|
||
function XGuildManager.GuildKickMember(playerId, cb)
|
||
if XDataCenter.GuildWarManager.CheckActivityIsInTime() and XDataCenter.GuildWarManager.CheckRoundIsInTime() then
|
||
XUiManager.TipText("GuildWarCantKickMember")
|
||
return
|
||
end
|
||
XNetwork.Call(GuildRpc.GuildKickMember, { OtherId = playerId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
GuildData:RemoveMember(playerId)
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_UPDATE_MEMBER_INFO)
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--获取公会推荐列表请求
|
||
function XGuildManager.GuildListRecommendRequest(pageNo, cb)
|
||
XNetwork.Call(GuildRpc.GuildListRecommend, { PageNo = pageNo }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
XGuildManager.PreRequestRecommendTime = XTime.GetServerNowTimestamp()
|
||
XGuildManager.HandleGuildRecommendDatas(pageNo, res.Datas)
|
||
GuildJoinCdEnd = res.JoinCdEnd
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
function XGuildManager.GetGuildJoinCdEnd()
|
||
return GuildJoinCdEnd
|
||
end
|
||
|
||
-- 公会搜索
|
||
function XGuildManager.GuildFind(guildname, cb)
|
||
XNetwork.Call(GuildRpc.GuildFind, { GuildName = guildname }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
XGuildManager.HandleGuildFindDatas(guildname, res.GuildList)
|
||
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--迎新语,检测屏蔽词
|
||
function XGuildManager.GuildChangeScriptRequest(scripts, selects, autoChat, cb)
|
||
XNetwork.Call(GuildRpc.GuildChangeScript, { Scripts = scripts }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
for i= 1, #scripts do
|
||
if res.Scripts and res.Scripts[i] ~= nil and res.Scripts[i] ~= "" then
|
||
scripts[i] = res.Scripts[i]
|
||
end
|
||
end
|
||
local scriptsData = {}
|
||
local exist = false
|
||
for index, data in pairs(scripts) do
|
||
scriptsData[index] = {}
|
||
scriptsData[index].WelcomeWord = data
|
||
scriptsData[index].Select = selects[index]
|
||
exist = exist or selects[index]
|
||
end
|
||
autoChat = autoChat and exist
|
||
XDataCenter.GuildManager.SetGuildScriptDatas(scriptsData, autoChat)
|
||
XUiManager.TipText("GuildWelcomeWordSuccessTips")
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
--获取当前自定义话术 暂时弃用
|
||
-- function XGuildManager.GuildListScriptRequest(cb)
|
||
-- XNetwork.Call(GuildRpc.GuildListScript, {}, function(res)
|
||
-- if res.Code ~= XCode.Success then
|
||
-- XUiManager.TipCode(res.Code)
|
||
-- return
|
||
-- end
|
||
|
||
-- XGuildManager.HandleGuildScriptDatas(res.Scripts, res.AutoChat)
|
||
-- if cb then
|
||
-- cb()
|
||
-- end
|
||
-- end)
|
||
-- end
|
||
|
||
--获取已发布心愿列表
|
||
function XGuildManager.GuildListWishRequest(cb)
|
||
XNetwork.Call(GuildRpc.GuildListWish, {}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
XGuildManager.HandleListWishDatas(res.WishesData, res.WishCount, res.WishContributeCount)
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 公会天赋
|
||
function XGuildManager.GuildTalentListReq(func)
|
||
XNetwork.Call(GuildRpc.GuildListTalent, {}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
|
||
TalentPoint = res.Point
|
||
TalentLevels = {}
|
||
local talentSumLevel = 0
|
||
for id, level in pairs(res.Talents or {}) do
|
||
TalentLevels[id] = level
|
||
talentSumLevel = talentSumLevel + level
|
||
end
|
||
GuildData.TalentSumLevel = talentSumLevel
|
||
if func then
|
||
func()
|
||
end
|
||
end)
|
||
end
|
||
|
||
-- 公会天赋升级
|
||
function XGuildManager.GuildUpgradeTalent(talentId, func)
|
||
XNetwork.Call(GuildRpc.GuildUpgradeTalent, { Id = talentId }, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
GuildData.TalentSumLevel = GuildData.TalentSumLevel + 1
|
||
TalentPoint = res.Point
|
||
-- if not TalentLevels[talentId] then
|
||
-- TalentLevels[talentId] = 0
|
||
-- end
|
||
-- local oldLevel = TalentLevels[talentId]
|
||
-- TalentLevels[talentId] = oldLevel + 1
|
||
|
||
if func then
|
||
func()
|
||
end
|
||
end)
|
||
end
|
||
|
||
function XGuildManager.GetTalentPoint()
|
||
return TalentPoint
|
||
end
|
||
|
||
function XGuildManager.GetTalentLevel(id)
|
||
return TalentLevels[id] or 0
|
||
end
|
||
|
||
-- 是否解锁
|
||
function XGuildManager.IsTalentUnlock(id)
|
||
local talentTemplate = XGuildConfig.GetGuildTalentById(id)
|
||
if not talentTemplate then return false end
|
||
local curGuildLevel = XGuildManager.GetGuildLevel()
|
||
return curGuildLevel >= talentTemplate.GuildLevel
|
||
end
|
||
|
||
function XGuildManager.IsTalentMaxLevel(id)
|
||
local curLevel = XGuildManager.GetTalentLevel(id)
|
||
local talentTemplate = XGuildConfig.GetGuildTalentById(id)
|
||
if not talentTemplate then return false end
|
||
return talentTemplate.CostPoint[curLevel + 1] == nil
|
||
end
|
||
|
||
function XGuildManager.CheckAllTalentLevelMax()
|
||
if XGuildManager.IsGuildLevelMax(XGuildManager.GetGuildLevel()) then --or
|
||
-- XGuildManager.GetTalentPointFromBuild() > 0 then
|
||
if TalentLevelCount == 0 then
|
||
local sum = 0
|
||
local points = XGuildConfig.GetSortedTalentPoints()
|
||
for _, v in pairs(points) do
|
||
local talentTemplate = XGuildConfig.GetGuildTalentById(v.Id)
|
||
sum = sum + #talentTemplate.CostPoint
|
||
end
|
||
TalentLevelCount = sum
|
||
end
|
||
return GuildData.TalentSumLevel == TalentLevelCount
|
||
end
|
||
return false
|
||
end
|
||
|
||
-- 能否升级:是否解锁、父节点、消耗,最高级
|
||
function XGuildManager.CanTalentUpgrade(id)
|
||
if not XGuildManager.IsTalentUnlock(id) then return false end
|
||
local curLevel = XGuildManager.GetTalentLevel(id)
|
||
local talentTemplate = XGuildConfig.GetGuildTalentById(id)
|
||
if not talentTemplate then return false end
|
||
|
||
if not XGuildManager.CheckParentTalent(id) then
|
||
return false
|
||
end
|
||
|
||
local cost = talentTemplate.CostPoint[curLevel + 1] or 0
|
||
return TalentPoint >= cost
|
||
end
|
||
|
||
-- 前置条件检查
|
||
function XGuildManager.CheckParentTalent(id)
|
||
local talentTemplate = XGuildConfig.GetGuildTalentById(id)
|
||
if not talentTemplate then return false end
|
||
|
||
local preUnlock = false
|
||
local preAllZero = true
|
||
local curLevel = XGuildManager.GetTalentLevel(id)
|
||
for i = 1, #talentTemplate.Parent do
|
||
local preId = talentTemplate.Parent[i]
|
||
local preLevel = XGuildManager.GetTalentLevel(preId)
|
||
if preId > 0 then
|
||
preAllZero = false
|
||
if preLevel > curLevel then
|
||
preUnlock = true
|
||
break
|
||
end
|
||
end
|
||
end
|
||
|
||
if not preAllZero then
|
||
return preUnlock
|
||
end
|
||
return true
|
||
end
|
||
|
||
-- 父节点是否都为0
|
||
function XGuildManager.IsTalentParentAllZero(id)
|
||
local talentTemplate = XGuildConfig.GetGuildTalentById(id)
|
||
if not talentTemplate then return false end
|
||
|
||
local allZero = true
|
||
for i = 1, #talentTemplate.Parent do
|
||
if talentTemplate.Parent[i] > 0 then
|
||
allZero = false
|
||
break
|
||
end
|
||
end
|
||
return allZero
|
||
end
|
||
|
||
-- 公会日常任务
|
||
function XGuildManager.GetSortedGuildDailyTasks()
|
||
local tasks = XDataCenter.TaskManager.GetGuildDailyFullTaskList()
|
||
-- 是否需要排序
|
||
for _, v in pairs(tasks or {}) do
|
||
v.SortWeight = 2
|
||
if v.State == XDataCenter.TaskManager.TaskState.Achieved then
|
||
v.SortWeight = 1
|
||
elseif v.State == XDataCenter.TaskManager.TaskState.Finish or v.State == XDataCenter.TaskManager.TaskState.Invalid then
|
||
v.SortWeight = 3
|
||
end
|
||
end
|
||
|
||
table.sort(tasks, function(taskA, taskB)
|
||
if taskA.SortWeight == taskB.SortWeight then
|
||
return taskA.Id < taskB.Id
|
||
end
|
||
return taskA.SortWeight < taskB.SortWeight
|
||
end)
|
||
return tasks
|
||
end
|
||
|
||
-- 是否有购买的权限
|
||
function XGuildManager.CheckShopBuyAccess(shopId)
|
||
if shopId == XGuildConfig.GuildPurchaseShop then
|
||
return XGuildManager.IsGuildAdminister()
|
||
end
|
||
return true
|
||
end
|
||
|
||
-- 是否可以领取贡献奖励
|
||
function XGuildManager.CanCollectContributeReward()
|
||
if XGuildManager.IsGuildTourist() then return false end
|
||
|
||
return HasContributeReward == 1
|
||
end
|
||
|
||
-- 获取公会排名
|
||
function XGuildManager.GuildListRankRequest(order, cb)
|
||
XNetwork.Call(GuildRpc.GuildListRank, { Order = order}, function(res)
|
||
if res.Code ~= XCode.Success then
|
||
XUiManager.TipCode(res.Code)
|
||
return
|
||
end
|
||
XGuildManager.HandleListRankDatas(order, res.RankList, res.MyRankNum)
|
||
if cb then
|
||
cb()
|
||
end
|
||
end)
|
||
end
|
||
-- 是否紧急维护状态
|
||
function XGuildManager.IsUrgentMaintainState()
|
||
return GuildData.MaintainState == XGuildConfig.GuildMaintainState.Urgent
|
||
end
|
||
|
||
-- 紧急状态开始时间
|
||
function XGuildManager.GetEmergenceTime()
|
||
return GuildData.EmergenceTime
|
||
end
|
||
|
||
-- 获取建设度
|
||
function XGuildManager.GetBuild()
|
||
return GuildData.Build
|
||
end
|
||
|
||
-- 获取申请设置
|
||
function XGuildManager.GetApplyOption()
|
||
return GuildData.Option
|
||
end
|
||
|
||
-- 获取最低等级
|
||
function XGuildManager.GetMinLevelOption()
|
||
return GuildData.MinLevel
|
||
end
|
||
|
||
-- 获取最高等级获得的天赋点
|
||
function XGuildManager.GetTalentPointFromBuild()
|
||
return GuildData.TalentPointFromBuild or 0
|
||
end
|
||
|
||
-- 获取当前荣耀等级
|
||
function XGuildManager.GetGloryLevel()
|
||
local level = math.modf( GuildData.TalentPointFromBuild / XGuildConfig.GloryPointsPerLevel)
|
||
return level > XGuildConfig.GuildGloryMaxLevel and XGuildConfig.GuildGloryMaxLevel or level
|
||
end
|
||
|
||
-- 礼包是否可以领取
|
||
function XGuildManager.CanCollectGift(giftLevel)
|
||
if XGuildManager.IsGuildTourist() then return false end
|
||
if not XGuildManager.IsJoinGuild() then return false end
|
||
|
||
local lastGuildId = XGuildManager.GetGiftGuildGot()
|
||
local curGuildId = XGuildManager.GetGuildId()
|
||
if lastGuildId > 0 and lastGuildId ~= curGuildId then
|
||
return false
|
||
end
|
||
|
||
local giftGuildLevel = XGuildManager.GetGiftGuildLevel()
|
||
local giftLevelGots = XGuildManager.GetGiftLevelGot()
|
||
if giftLevelGots[giftLevel] then return false end
|
||
|
||
local giftData = XGuildConfig.GetGuildGiftByGuildLevelAndGiftLevel(giftGuildLevel, giftLevel)
|
||
if not giftData then return false end
|
||
|
||
local giftContribute = XGuildManager.GetGiftContribute()
|
||
if giftContribute < giftData.GiftContribute then
|
||
return false
|
||
end
|
||
|
||
return true
|
||
end
|
||
|
||
-- 公会礼包贡献进度
|
||
function XGuildManager.GetGiftContribute()
|
||
return GuildData.GiftContribute
|
||
end
|
||
|
||
-- 礼包刷新时的公会等级
|
||
function XGuildManager.GetGiftGuildLevel()
|
||
return GuildData.GiftGuildLevel
|
||
end
|
||
|
||
-- 礼包当前等级
|
||
function XGuildManager.GetGiftLevel()
|
||
return GuildData.GiftLevel
|
||
end
|
||
|
||
-- 玩家已领取的礼包等级
|
||
function XGuildManager.GetGiftLevelGot()
|
||
return GuildData.GiftLevelGot
|
||
end
|
||
|
||
-- 玩家在哪个公会领过礼包
|
||
function XGuildManager.GetGiftGuildGot()
|
||
return GuildData.GiftGuildGot
|
||
end
|
||
|
||
-- 当前剩余的贡献值
|
||
function XGuildManager.GetGuildContributeLeft()
|
||
return GuildData.GuildContributeLeft
|
||
end
|
||
|
||
-- 公会id
|
||
function XGuildManager.GetGuildId()
|
||
return GuildData.GuildId
|
||
end
|
||
|
||
-- 公会名字
|
||
function XGuildManager.GetGuildName()
|
||
return GuildData.GuildName
|
||
end
|
||
|
||
-- 公会等级
|
||
function XGuildManager.GetGuildLevel()
|
||
return GuildData.GuildLevel
|
||
end
|
||
|
||
function XGuildManager.GetGuildContributeIn7Days()
|
||
return GuildData.GuildContributeIn7Days
|
||
end
|
||
|
||
-- 判断公会等级是否提升
|
||
function XGuildManager.CheckGuildLevelUp()
|
||
if not XGuildManager.IsJoinGuild() then return false end
|
||
if XLuaUiManager.IsUiShow("UiGuildLevelUp") then return false end
|
||
local curLevel = XGuildManager.GetGuildLevel()
|
||
local lastLevel = XGuildManager.GetLastLevel()
|
||
-- -1 表示换了公会或未保存过
|
||
if lastLevel == -1 then
|
||
XGuildManager.SaveGuildLevel()
|
||
return false
|
||
end
|
||
if lastLevel < curLevel then
|
||
GuildData.GuildLastLevel = lastLevel
|
||
XLuaUiManager.Open("UiGuildLevelUp",lastLevel, curLevel, function()
|
||
XGuildManager.SaveGuildLevel(curLevel)
|
||
end)
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
|
||
--最后一次保存的等级
|
||
function XGuildManager.GetLastLevel()
|
||
return GuildData.GuildLastLevel or XGuildManager.GetGuildPrefs(XGuildConfig.KEY_LAST_LEVEL, -1)
|
||
end
|
||
|
||
-- 保存当前等级
|
||
function XGuildManager.SaveGuildLevel(level)
|
||
local curLevel = level or XGuildManager.GetGuildLevel()
|
||
XGuildManager.SaveGuildPrefs(XGuildConfig.KEY_LAST_LEVEL, curLevel)
|
||
GuildData.GuildLastLevel = curLevel
|
||
end
|
||
|
||
-- 公会等级是否达到最大(是否满级)
|
||
function XGuildManager.IsGuildLevelMax(level)
|
||
local isMax = false
|
||
local levelData = XGuildConfig.GetGuildLevelDataBylevel(level)
|
||
if not levelData then return isMax end
|
||
|
||
local nextLevel = level + 1
|
||
local nextLevelData = XGuildConfig.GetGuildLevelDataBylevel(nextLevel)
|
||
if not nextLevelData then
|
||
isMax = true
|
||
end
|
||
|
||
return isMax
|
||
end
|
||
|
||
function XGuildManager.GetGuildExpAmount()
|
||
local GuildBuildIntervalWhenMaxLevel = CS.XGame.Config:GetInt("GuildBuildIntervalWhenMaxLevel")
|
||
local guildLevel = XGuildManager.GetGuildLevel()
|
||
local fillAmount = 0
|
||
if XGuildManager.IsGuildLevelMax(guildLevel) then
|
||
-- 达到最高等级
|
||
fillAmount = XGuildManager.GetBuild() * 1.0 / GuildBuildIntervalWhenMaxLevel
|
||
else
|
||
local data = XGuildConfig.GetGuildLevelDataBylevel(guildLevel)
|
||
local max = data and data.Build
|
||
-- 未到达最高等级
|
||
fillAmount = XGuildManager.GetBuild() * 1.0 / (max and max > 0 and max or 1)
|
||
end
|
||
return fillAmount
|
||
end
|
||
-- 保存本地数据
|
||
function XGuildManager.SaveGuildPrefs(key, value, type)
|
||
local guildId = XGuildManager.GetGuildId()
|
||
if XPlayer.Id and guildId then
|
||
key = string.format("%s_%s_%s", key, tostring(XPlayer.Id), tostring(guildId))
|
||
if type == DataType.String then
|
||
CS.UnityEngine.PlayerPrefs.SetString(key, value)
|
||
else
|
||
CS.UnityEngine.PlayerPrefs.SetInt(key, value)
|
||
end
|
||
CS.UnityEngine.PlayerPrefs.Save()
|
||
end
|
||
end
|
||
|
||
-- 获取本地数据
|
||
function XGuildManager.GetGuildPrefs(key, defaultValue, type)
|
||
local guildId = XGuildManager.GetGuildId()
|
||
if XPlayer.Id and guildId then
|
||
key = string.format("%s_%s_%s", key, tostring(XPlayer.Id), tostring(guildId))
|
||
if CS.UnityEngine.PlayerPrefs.HasKey(key) then
|
||
local guildPref = nil
|
||
if type == DataType.String then
|
||
guildPref = CS.UnityEngine.PlayerPrefs.GetString(key)
|
||
else
|
||
guildPref = CS.UnityEngine.PlayerPrefs.GetInt(key)
|
||
end
|
||
return (guildPref == nil or guildPref == 0) and defaultValue or guildPref
|
||
end
|
||
end
|
||
return defaultValue
|
||
end
|
||
|
||
-- 公会宣言
|
||
function XGuildManager.GetGuildDeclaration()
|
||
return GuildData.GuildDeclaration
|
||
end
|
||
|
||
-- 公会内部通讯
|
||
function XGuildManager.GetGuildInterCom()
|
||
return GuildData.GuildInterCom
|
||
end
|
||
|
||
-- 公会图标
|
||
function XGuildManager.GetGuildIconId()
|
||
local headPortrait = XGuildConfig.GetGuildHeadPortraitById(GuildData.GuildIconId)
|
||
if not headPortrait then return nil end
|
||
return headPortrait.Icon
|
||
end
|
||
|
||
function XGuildManager.GetGuildHeadPortrait()
|
||
return GuildData.GuildIconId
|
||
end
|
||
|
||
-- 会长名字
|
||
function XGuildManager.GetGuildLeaderName()
|
||
return GuildData.GuildLeaderName
|
||
end
|
||
|
||
-- 会员数量
|
||
function XGuildManager.GetMemberCount()
|
||
return GuildData.GuildMemberCount
|
||
end
|
||
|
||
-- 会员在线数量
|
||
function XGuildManager.GetOnlineMemberCount()
|
||
local onlineCount = 0
|
||
local allMembers = GuildData:GetGuildMembers()
|
||
for _, member in pairs(allMembers or {}) do
|
||
if member.OnlineFlag == 1 then
|
||
onlineCount = onlineCount + 1
|
||
end
|
||
end
|
||
return onlineCount
|
||
end
|
||
|
||
-- 会员最大数量
|
||
function XGuildManager.GetMemberMaxCount()
|
||
return GuildData.GuildMemberMaxCount
|
||
end
|
||
|
||
-- 是否可以弹劾会长
|
||
function XGuildManager.CanImpeachLeader()
|
||
return CanImpeach
|
||
end
|
||
|
||
-- 是否弹劾过会长
|
||
function XGuildManager.HasImpeachLeader()
|
||
return HasImpeach
|
||
end
|
||
|
||
-- 设置弹劾过会长
|
||
function XGuildManager.SetImpeachLeader()
|
||
HasImpeach = true
|
||
end
|
||
|
||
-- 获取成员
|
||
function XGuildManager.GetMemberList()
|
||
return GuildData:GetGuildMembers()
|
||
end
|
||
|
||
-- 获取成员(游客)
|
||
function XGuildManager.GetVistorMemberList(guildid)
|
||
return GuildVistorInfoDatas[guildid]:GetGuildMembers()
|
||
end
|
||
|
||
-- 清掉获取成员
|
||
function XGuildManager.ClearVistorGuildMembers(guildid)
|
||
if GuildVistorInfoDatas[guildid] then
|
||
GuildVistorInfoDatas[guildid]:ClearGuildMembers()
|
||
end
|
||
end
|
||
|
||
-- 推荐页数
|
||
function XGuildManager.GetRecommendPageNo()
|
||
RecommendPageNo = RecommendPageNo % 10 + 1
|
||
return RecommendPageNo
|
||
end
|
||
|
||
-- 自定义职位{Id = Name}
|
||
function XGuildManager.GetAllRankNames()
|
||
return GuildData.DecodeRankNames
|
||
end
|
||
|
||
function XGuildManager.GetRankNameByLevel(level)
|
||
return GuildData:GetRankNameByLevel(level)
|
||
end
|
||
|
||
-- 查看申请者列表
|
||
function XGuildManager.GetGuildApplyList()
|
||
return GuildApplyListDatas
|
||
end
|
||
|
||
-- 重置申请信息
|
||
function XGuildManager.ResetApplyMemberList()
|
||
HasApplyMember = false
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_APPLY_LIST_CHANGED)
|
||
end
|
||
|
||
-- 是否有申请信息
|
||
function XGuildManager.GetHasApplyMemberList()
|
||
if XGuildManager.IsGuildTourist() or not XGuildManager.IsGuildAdminister() then return false end
|
||
return HasApplyMember
|
||
end
|
||
|
||
-- 获取保存公会聊天缓存的key
|
||
function XGuildManager.GetGuildChannelKey(guildId)
|
||
return string.format("GuildKey_%s_%s", tostring(XPlayer.Id), tostring(guildId))
|
||
end
|
||
|
||
-- 查看是否有招募
|
||
function XGuildManager.HasGuildRecruitList()
|
||
return HasGuildRecruit
|
||
end
|
||
|
||
-- 重置招募列表
|
||
function XGuildManager.ResetGuildRecruit()
|
||
if HasGuildRecruit then
|
||
HasGuildRecruit = false
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GUILD_RECRUIT_LIST_CHANGED)
|
||
end
|
||
end
|
||
|
||
-- 查询免费改名机会
|
||
function XGuildManager.GetFreeChangeGuildName()
|
||
return FreeChangeGuildNameCount > 0
|
||
end
|
||
|
||
-- 使用免费改名机会
|
||
function XGuildManager.SetFreeChangeGuildNameCount()
|
||
if FreeChangeGuildNameCount > 0 then
|
||
FreeChangeGuildNameCount = FreeChangeGuildNameCount - 1
|
||
end
|
||
end
|
||
|
||
-- 获取工会boss结束时间
|
||
function XGuildManager.GuildBossEndTime()
|
||
return GuildData.BossEndTime
|
||
end
|
||
|
||
-- 更新工会boss结束时间
|
||
function XGuildManager.SetGuildBossEndTime(val)
|
||
if val then
|
||
GuildData.BossEndTime = val
|
||
else
|
||
XLog.Warning("SetGuildBossEndTime(val) Failed")
|
||
end
|
||
end
|
||
|
||
--获取当前迎新语
|
||
function XGuildManager.GetGuildScriptDatas()
|
||
if not next(GuildScriptListDatas) then
|
||
GuildScriptListDatas = {}
|
||
for i = 1, XGuildConfig.GuildDefaultWelcomeWord do
|
||
local key = string.format("%s_%d_%d", GuildWelcomeWordKey, XPlayer.Id, i)
|
||
if not CS.UnityEngine.PlayerPrefs.HasKey(key) then
|
||
break
|
||
end
|
||
GuildScriptListDatas[i] = {}
|
||
GuildScriptListDatas[i].WelcomeWord = CS.UnityEngine.PlayerPrefs.GetString(key ,nil)
|
||
key = string.format("%s_%d_%d", GuildWelcomeSelectKey, XPlayer.Id, i)
|
||
GuildScriptListDatas[i].Select = (CS.UnityEngine.PlayerPrefs.GetInt(key, 0) == 1)
|
||
end
|
||
if not next(GuildScriptListDatas) then
|
||
GuildScriptListDatas = XGuildConfig.GetDefaultWelcomeWords()
|
||
end
|
||
end
|
||
return GuildScriptListDatas
|
||
end
|
||
|
||
function XGuildManager.HandleGuildScriptSelectedDatas(scriptsData)
|
||
GuildScriptSelectedDatas = {}
|
||
for _, v in pairs(scriptsData) do
|
||
if v.Select then
|
||
table.insert(GuildScriptSelectedDatas, v.WelcomeWord)
|
||
end
|
||
end
|
||
end
|
||
|
||
function XGuildManager.GetGuildScriptSelectedDatas()
|
||
if GuildScriptSelectedDatas == nil or next(GuildScriptSelectedDatas) == nil then
|
||
local scriptsData = XGuildManager.GetGuildScriptDatas()
|
||
XGuildManager.HandleGuildScriptSelectedDatas(scriptsData)
|
||
end
|
||
return GuildScriptSelectedDatas
|
||
end
|
||
|
||
--处理迎新语数据(可以优化,用XSaveTool.SaveData方法)
|
||
function XGuildManager.SetGuildScriptDatas(scriptsData, autoChat)
|
||
GuildScriptListDatas = {}
|
||
if scriptsData and next(scriptsData) then
|
||
for k, v in pairs(scriptsData) do
|
||
if v then
|
||
table.insert(GuildScriptListDatas, v)
|
||
local key = string.format("%s_%d_%d", GuildWelcomeWordKey, XPlayer.Id, k)
|
||
CS.UnityEngine.PlayerPrefs.SetString(key, v.WelcomeWord)
|
||
key = string.format("%s_%d_%d", GuildWelcomeSelectKey, XPlayer.Id, k)
|
||
CS.UnityEngine.PlayerPrefs.SetInt(key, v.Select and 1 or 0)
|
||
end
|
||
end
|
||
XGuildManager.HandleGuildScriptSelectedDatas(scriptsData)
|
||
end
|
||
GuildScriptAutoChat = autoChat
|
||
local key = string.format("%s_%d", GuildWelcomeAutoChatKey, XPlayer.Id)
|
||
CS.UnityEngine.PlayerPrefs.SetInt(key, GuildScriptAutoChat and 1 or 0)
|
||
CS.UnityEngine.PlayerPrefs.Save()
|
||
end
|
||
|
||
function XGuildManager.GetGuildScriptAutoChat()
|
||
if GuildScriptAutoChat == nil then
|
||
local key = string.format("%s_%d", GuildWelcomeAutoChatKey, XPlayer.Id)
|
||
-- 是否自动喊话,默认开启
|
||
GuildScriptAutoChat = (CS.UnityEngine.PlayerPrefs.GetInt(key, 1) == 1)
|
||
end
|
||
return GuildScriptAutoChat
|
||
end
|
||
|
||
function XGuildManager.InitGuildCustomNameTable()
|
||
GuildCustomName = {}
|
||
for _, v in pairs(XGuildConfig.GuildRankLevel) do
|
||
GuildCustomName[v] = {}
|
||
end
|
||
local templates = XTool.Clone(XGuildConfig.GetCustomNameTemplate())
|
||
local list = {}
|
||
for index, template in pairs(templates) do
|
||
if template.Enable then
|
||
template.Id = index
|
||
table.insert(list, template)
|
||
end
|
||
end
|
||
table.sort(list, function(itemA, itemB)
|
||
return itemA.Id < itemB.Id
|
||
end)
|
||
for k, v in pairs(list) do
|
||
table.insert(GuildCustomName[v.RankLevel], v.Name)
|
||
end
|
||
end
|
||
|
||
function XGuildManager.GetGuildCustomName()
|
||
if not next(GuildCustomName) then
|
||
XGuildManager.InitGuildCustomNameTable()
|
||
end
|
||
return GuildCustomName
|
||
end
|
||
|
||
function XGuildManager.GetMemberDataByPlayerId(playerId)
|
||
if GuildData == nil then
|
||
return nil
|
||
end
|
||
local member = GuildData:GetGuildMembers()[playerId]
|
||
return member
|
||
end
|
||
|
||
XGuildManager.Init()
|
||
return XGuildManager
|
||
end
|
||
|
||
-- 上线时推送公会数据
|
||
XRpc.NotifyGuildData = function(notifyData)
|
||
XDataCenter.GuildManager.AsyncGuildData(notifyData)
|
||
end
|
||
|
||
-- 推送公会事件
|
||
XRpc.NotifyGuildEvent = function(notifyData)
|
||
XDataCenter.GuildManager.AsyncGuildEvent(notifyData)
|
||
end
|
||
|
||
XRpc.NotifyRankName = function(notifyData)
|
||
XDataCenter.GuildManager.AsyncGuildRankName(notifyData)
|
||
end
|
||
|
||
XRpc.NotifyGuildMaintain = function(notifyData)
|
||
XDataCenter.GuildManager.AsyncGuildMaintain(notifyData)
|
||
end
|
||
|
||
XRpc.NotifyGuildImpeach = function(notifyData)
|
||
XDataCenter.GuildManager.AsyncGuildImpeach(notifyData)
|
||
end |