|
GuildModel = GuildModel or BaseClass(BaseModel)
|
|
|
|
-- 旧协议,但是还有用的
|
|
GuildModel.REQUEST_CCMD_EVENT = "GuildModel.REQUEST_CCMD_EVENT" -- 请求社团协议事件
|
|
GuildModel.UPDATE_RED_DOT_BY_TYPE = "GuildModel.UPDATE_RED_DOT_BY_TYPE" -- 刷新社团系统全局红点(根据界面类型)
|
|
GuildModel.RequestGuildListEvt = "GuildModel.RequestGuildListEvt" --请求社团列表事件
|
|
GuildModel.RefreshGuildListEvt = "GuildModel.RefreshGuildListEvt" --刷新社团列表事件
|
|
GuildModel.ApplyJoinGuildEvt = "GuildModel.ApplyJoinGuildEvt" --申请加入社团
|
|
GuildModel.RequestMultiJoinGuildEvt = "GuildModel.RequestMultiJoinGuildEvt" --请求海投简历
|
|
GuildModel.RequestCreateGuildEvt = "GuildModel.RequestCreateGuildEvt" --请求创建社团
|
|
GuildModel.RequestGuildBaseInfoEvt = "GuildModel.RequestGuildBaseInfoEvt" --请求社团基础信息
|
|
GuildModel.RefreshGuildInfoEvt = "GuildModel.RefreshGuildInfoEvt" --刷新社团主页基础信息
|
|
GuildModel.RefreshMainViewMemberInfoEvt = "GuildModel.RefreshMainViewMemberInfoEvt" --刷新社团主界面请求成员信息
|
|
GuildModel.RequestMemberViewMemberInfoEvt = "GuildModel.RequestMemberViewMemberInfoEvt" --请求成员界面成员信息
|
|
GuildModel.RefreshMemberApplyListEvt = "GuildModel.RefreshMemberApplyListEvt" --刷新成员申请信息
|
|
GuildModel.RequestQuitGuildEvt = "GuildModel.RequestQuitGuildEvt" --请求退出社团
|
|
GuildModel.RequestSetApplyMemberStateEvt = "GuildModel.RequestSetApplyMemberStateEvt" --请求设置玩家的申请状态
|
|
GuildModel.RefreshtSetApplyMemberStateEvt = "GuildModel.RefreshtSetApplyMemberStateEvt" --更新设置玩家的申请状态
|
|
GuildModel.RefreshApplySettingViewStateEvt = "GuildModel.RefreshApplySettingViewStateEvt" --刷新申请设置界面的状态
|
|
GuildModel.RequestApplySettingConditionEvt = "GuildModel.RequestApplySettingConditionEvt" --请求申请设置界面条件
|
|
GuildModel.RequestSetAnnounceEvt = "GuildModel.RequestSetAnnounceEvt" --请求设置公告
|
|
GuildModel.RefreshGuildAnnounceEvt = "GuildModel.RefreshGuildAnnounceEvt" --刷新主界面公告
|
|
GuildModel.RequestAgreeApplyListEvt = "GuildModel.RequestAgreeApplyListEvt" --同意申请列表
|
|
GuildModel.RefreshPostNumEvt = "GuildModel.RefreshPostNumEvt" --刷新职位数量
|
|
GuildModel.RequestAppointMemberPostEvt = "GuildModel.RequestAppointMemberPostEvt" --任命职位
|
|
GuildModel.RequestKickOutGuildEvt = "GuildModel.RequestKickOutGuildEvt" --请求踢出社团
|
|
GuildModel.RefreshKickOutGuildEvt = "GuildModel.RefreshKickOutGuildEvt" --刷新踢出社团
|
|
GuildModel.RefreshPermissionListEvt = "GuildModel.RefreshPermissionListEvt" --刷新玩家权限列表
|
|
GuildModel.UPDATE_GOODS_LIST = "GuildModel.UPDATE_GOODS_LIST" --刷新社团商店列表信息
|
|
GuildModel.RefreshBuyGoodsItemEvt = "GuildModel.RefreshBuyGoodsItemEvt" --更新购买goodsitem数量信息事件
|
|
GuildModel.UPDATE_GUILDACTIVE_RANK_DATA = "GuildModel.UPDATE_GUILDACTIVE_RANK_DATA" -- 从排行榜模块获取活跃度社团排行信息
|
|
GuildModel.OPEN_GUILD_EVENT_VIEW = "GuildModel.OPEN_GUILD_EVENT_VIEW" --跳转到指定活动界面
|
|
GuildModel.AFTER_GET_HISTORY_GUILD_COUNT = "GuildModel.AFTER_GET_HISTORY_GUILD_COUNT" --查询社团历史最大数量后
|
|
|
|
--本服团战
|
|
GuildModel.OPEN_GUILD_WAR_SCENE_VIEW = "GuildModel.OPEN_GUILD_WAR_SCENE_VIEW" --本服团战场景界面
|
|
GuildModel.OPEN_GUILD_WAR_RANK_VIEW = "GuildModel.OPEN_GUILD_WAR_RANK_VIEW" --本服团战场排行
|
|
GuildModel.ENTER_GUILD_WAR_SCENE = "GuildModel.ENTER_GUILD_WAR_SCENE" --进入本服团战场景
|
|
GuildModel.LEAVE_GUILD_WAR_SCENE = "GuildModel.LEAVE_GUILD_WAR_SCENE" --离开本服团战场景
|
|
GuildModel.GUILD_WAR_LAST_MVP = "GuildModel.GUILD_WAR_LAST_MVP" --上期明星团长
|
|
GuildModel.GUILD_WAR_RANK_LIST = "GuildModel.GUILD_WAR_RANK_LIST" --本服团战排行数据
|
|
GuildModel.GUILD_WAR_RESULT = "GuildModel.GUILD_WAR_RESULT" --大战结果
|
|
GuildModel.GUILD_WAR_UPDATE_SCROE = "GuildModel.GUILD_WAR_UPDATE_SCROE" --大战积分刷新
|
|
GuildModel.GUILD_WAR_BASE_INFO = "GuildModel.GUILD_WAR_BASE_INFO" --大战基本信息
|
|
GuildModel.GUILD_WAR_PICK_STATE = "GuildModel.GUILD_WAR_PICK_STATE" --采集状态变化
|
|
GuildModel.GUILD_WAR_BOSS_BORN = "GuildModel.GUILD_WAR_BOSS_BORN" --boss出生
|
|
GuildModel.GUILD_WAR_BOSS_DIE = "GuildModel.GUILD_WAR_BOSS_DIE" --boss死亡
|
|
GuildModel.GUILD_WAR_OPEN_STATE = "GuildModel.GUILD_WAR_OPEN_STATE" --开放情况
|
|
GuildModel.GUILD_WAR_START_COLLECT = "GuildModel.GUILD_WAR_START_COLLECT" --开始采集
|
|
GuildModel.GUILD_WAR_PROJECT = "GuildModel.GUILD_WAR_PROJECT" --护盾
|
|
GuildModel.OPEN_SELECT_SERVER = "GuildModel.OPEN_SELECT_SERVER" --战区选择
|
|
|
|
GuildModel.OPEN_ACTIVE_OPEN_TIPS_VIEW = "GuildModel.OPEN_ACTIVE_OPEN_TIPS_VIEW" --打开战场开启界面
|
|
GuildModel.SHOW_ACTIVE_OPEN_TIPS_RED = "GuildModel.SHOW_ACTIVE_OPEN_TIPS_RED" --显示战场开启红点
|
|
|
|
|
|
|
|
-- 社团驻地和社团活动协议相关
|
|
GuildModel.ENTER_GUILD_BASE = "GuildModel.ENTER_GUILD_BASE" --前往社团驻地
|
|
GuildModel.LEAVE_GUILD_BASE = "GuildModel.LEAVE_GUILD_BASE" --离开社团驻地
|
|
|
|
GuildModel.UPDATE_GUILD_EVENT_BY_TYPE = "GuildModel.UPDATE_GUILD_EVENT_BY_TYPE" --根据类型更新社团活动数据
|
|
|
|
GuildModel.UPDATE_GUILD_COLLECT_LEFT_TIME = "GuildModel.UPDATE_GUILD_COLLECT_LEFT_TIME" -- 刷新采集活动倒计时
|
|
GuildModel.UPDATE_GUILD_COLLECT_INFO_CON = "GuildModel.UPDATE_GUILD_COLLECT_INFO_CON" -- 刷新采集活动右上角信息栏
|
|
GuildModel.UODATE_GUILD_COLLECT_ACTIVITY_TIMES = "GuildModel.UODATE_GUILD_COLLECT_ACTIVITY_TIMES" -- 刷新活动界面的采集参加次数
|
|
GuildModel.UPDATE_GUILD_COLLECT_LEFT_COLLECT_MON_NUM = "GuildModel.UPDATE_GUILD_COLLECT_LEFT_COLLECT_MON_NUM"--刷新当前剩余的采集怪数量
|
|
GuildModel.OPEN_GUILD_COLLECT_REWARD_VIEW = "GuildModel.OPEN_GUILD_COLLECT_REWARD_VIEW"--打开封印裂隙奖励说明界面
|
|
GuildModel.ANS_GUILD_COLLECT_HELP_LIST = "GuildModel.ANS_GUILD_COLLECT_HELP_LIST"--刷新封印裂隙协助信息
|
|
GuildModel.CHANGE_GUILD_COLLECT_LEFT_CON_STATE = "GuildModel.CHANGE_GUILD_COLLECT_LEFT_CON_STATE"--切换封印裂隙左上角
|
|
GuildModel.FIND_WAY_TO_GUILD_COLLECT_HELP_MON = "GuildModel.FIND_WAY_TO_GUILD_COLLECT_HELP_MON"--寻路去杀协助的入侵怪
|
|
GuildModel.AUTO_FIND_WAY_TO_GUILD_COLLECT_MON = "GuildModel.AUTO_FIND_WAY_TO_GUILD_COLLECT_MON"--自动寻路去采集最近的裂隙
|
|
GuildModel.UPDATE_AUTO_GUILD_COLLECT_STATE = "GuildModel.UPDATE_AUTO_GUILD_COLLECT_STATE"--更新自动采集状态
|
|
GuildModel.GUILD_COLLECT_SUPPORT_CANCEL = "GuildModel.GUILD_COLLECT_SUPPORT_CANCEL"--封印裂隙取消事件
|
|
GuildModel.UPDATE_GUILD_COLLECT_SUPPORT_INFO_LIST = "UPDATE_GUILD_COLLECT_SUPPORT_INFO_LIST"--封印裂隙协助列表刷新
|
|
GuildModel.UPDATE_GUILD_COLLECT_NOW_SUPPORT_ID = "GuildModel.UPDATE_GUILD_COLLECT_NOW_SUPPORT_ID"--刷新当前的封印裂隙协助id
|
|
|
|
GuildModel.UPDATE_GUILD_BOSS_RANK = "GuildModel.UPDATE_GUILD_BOSS_RANK" -- 更新社团boss输出排行
|
|
GuildModel.UPDATE_GUILD_BOSS_PERSONAL_RANK = "GuildModel.UPDATE_GUILD_BOSS_PERSONAL_RANK" -- 更新社团boss个人输出信息
|
|
GuildModel.UPDATE_GUILDBOSS_INVINCIBLE = "GuildModel.UPDATE_GUILDBOSS_INVINCIBLE" -- 更新社团boss狂暴信息
|
|
|
|
GuildModel.UPDATE_GUILDPARTY_EXPDATA = "GuildModel.UPDATE_GUILDPARTY_EXPDATA" -- 更新社团派对经验信息
|
|
-- GuildModel.CHANGE_GUILDDANCE_ACTION = "GuildModel.CHANGE_GUILDDANCE_ACTION" -- 切换社团祝火跳舞动作
|
|
GuildModel.UPDATE_GUILD_ANNOUNCE_TIMES = "GuildModel.UPDATE_GUILD_ANNOUNCE_TIMES" -- 更新社团公告修改次数信息
|
|
GuildModel.UPDATE_GUILD_SCENE_MEMBER_NUM = "GuildModel.UPDATE_GUILD_SCENE_MEMBER_NUM" -- 社团驻地内人数协议
|
|
|
|
-- 社团界面相关逻辑
|
|
GuildModel.OPEN_GUILD_EDITOR_ANNOUNCE_VIEW = "GuildModel.OPEN_GUILD_EDITOR_ANNOUNCE_VIEW" -- 打开编辑社团公告界面
|
|
GuildModel.OPEN_POSITION_APPLY_VIEW = "GuildModel.OPEN_POSITION_APPLY_VIEW" -- 打开社团合并界面
|
|
GuildModel.UPDATE_MEMBER_VIEW_RED = "GuildModel.UPDATE_MEMBER_VIEW_RED" -- 刷新社团成员管理界面红点
|
|
GuildModel.UPDATE_ROLE_ACTIVE_DATA = "GuildModel.UPDATE_ROLE_ACTIVE_DATA" -- 更新社团个人活跃数据
|
|
GuildModel.UPDATE_GUILD_TASK_PROGRESS = "GuildModel.UPDATE_GUILD_TASK_PROGRESS" -- 更新社团活跃任务数据
|
|
GuildModel.UPDATE_GUILD_ACTIVE_DATA = "GuildModel.UPDATE_GUILD_ACTIVE_DATA" -- 更新社团周活跃数据
|
|
GuildModel.UPDATE_GUILD_ACTIVE_REWARD = "GuildModel.UPDATE_GUILD_ACTIVE_REWARD" -- 更新社团活跃奖励领取
|
|
GuildModel.UPDATE_ACTIVE_RED = "GuildModel.UPDATE_ACTIVE_RED" -- 刷新社团活跃奖励红点
|
|
GuildModel.OPEN_GUILD_LOG_VIEW = "GuildModel.OPEN_GUILD_LOG_VIEW" -- 打开社团合并界面
|
|
GuildModel.UPDATE_GUILD_LOG = "GuildModel.UPDATE_GUILD_LOG" -- 更新社团日志
|
|
GuildModel.UPDATE_GUILD_MERGE_INFO = "GuildModel.UPDATE_GUILD_MERGE_INFO" -- 更新社团合并信息
|
|
GuildModel.OPEN_GUILD_BOSS_VIEW = "GuildModel.OPEN_GUILD_BOSS_VIEW" -- 打开社团午间boss活动界面
|
|
GuildModel.OPEN_GUILD_SUPPORT_IFNO_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_IFNO_VIEW" -- 打开社团协助信息界面
|
|
GuildModel.CLOSE_GUILD_SUPPORT_IFNO_VIEW = "GuildModel.CLOSE_GUILD_SUPPORT_IFNO_VIEW" --关闭协助信息界面
|
|
GuildModel.OPEN_GUILD_SUPPORT_THANK_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_THANK_VIEW" -- 打开社团协助感谢界面
|
|
GuildModel.SHOW_GUILD_SUPPORT_THANK_BTN = "GuildModel.SHOW_GUILD_SUPPORT_THANK_BTN" --展示社团协助按钮
|
|
GuildModel.UPDATE_GUILD_SUPPOR_INFO = "GuildModel.UPDATE_GUILD_SUPPOR_INFO"--更新社团协助信息
|
|
GuildModel.BOARD_GUILD_SUPPOR_REMOVE = "GuildModel.BOARD_GUILD_SUPPOR_REMOVE"--社团协助成员取消协助
|
|
GuildModel.UPDATE_GUILD_SUPPOR_THANK_INFO = "GuildModel.UPDATE_GUILD_SUPPOR_THANK_INFO"--更新社团协助感谢信息
|
|
GuildModel.UPDATE_GUILD_SUPPOR_THANK_DESC = "GuildModel.UPDATE_GUILD_SUPPOR_THANK_DESC"--更新社团协助感谢说明
|
|
GuildModel.OPEN_GUILD_SUPPORT_GO_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_GO_VIEW"--打开社团协助前往界面
|
|
GuildModel.OPEN_GUILD_SUPPORT_RESULT_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_RESULT_VIEW"--打开社团协助结算界面
|
|
GuildModel.UPDATE_SUPPORT_THANK_LIST = "GuildModel.UPDATE_SUPPORT_THANK_LIST"--更新协助感谢列表
|
|
GuildModel.UPDATE_SUPPORT_GIFT_LIST = "GuildModel.UPDATE_SUPPORT_GIFT_LIST"--更新协助感谢领奖列表
|
|
GuildModel.OPEN_GUILD_SUPPORT_TIP_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_TIP_VIEW"--快捷发送界面
|
|
GuildModel.CLOSE_GUILD_SUPPORT_TIP_VIEW = "GuildModel.CLOSE_GUILD_SUPPORT_TIP_VIEW"--关闭快捷发送界面
|
|
GuildModel.OPEN_GUILD_SUPPORT_ACCEPT_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_ACCEPT_VIEW"--打开社团协助任务获取界面
|
|
GuildModel.OPEN_GUILD_SUPPORT_GUILD_BOSS_GO_VIEW = "GuildModel.OPEN_GUILD_SUPPORT_GUILD_BOSS_GO_VIEW"--打开社团协助BOSS前往界面
|
|
GuildModel.OPEN_REQUEST_MERGE_VIEW = "GuildModel.OPEN_REQUEST_MERGE_VIEW" -- 打开社团合并发起界面
|
|
|
|
|
|
GuildModel.OPEN_GUILD_BOSS_RESULT_VIEW = "GuildModel.OPEN_GUILD_BOSS_RESULT_VIEW" -- 打开社团boss结算界面
|
|
GuildModel.OPEN_GUILD_POS_ALLOT_VIEW = "GuildModel.OPEN_GUILD_POS_ALLOT_VIEW" -- 打开社团职位任命界面
|
|
GuildModel.OPEN_GUILD_APPLY_MGR_VIEW = "GuildModel.OPEN_GUILD_APPLY_MGR_VIEW" -- 打开社团申请管理界面
|
|
GuildModel.OPEN_GUILD_RENAME_VIEW = "GuildModel.OPEN_GUILD_RENAME_VIEW" -- 打开改名该标志界面
|
|
---- 拼单新事件
|
|
GuildModel.UPDATE_GUILD_SL_DATA = "GuildModel.UPDATE_GUILD_SL_DATA" -- 更新拼单数据
|
|
GuildModel.UPDATE_SELECTED_GUILD_SL_DATA = "GuildModel.UPDATE_SELECTED_GUILD_SL_DATA" -- 更新当前选中拼单数据
|
|
GuildModel.OPEN_GUILD_SL_REWARD_VIEW = "GuildModel.OPEN_GUILD_SL_REWARD_VIEW" -- 打开社团拼单奖励界面
|
|
GuildModel.OPEN_GUILD_SL_THANK_VIEW = "GuildModel.OPEN_GUILD_SL_THANK_VIEW" -- 打开社团拼单感谢界面
|
|
----
|
|
GuildModel.PICK_UP_BOSS_DROP_ITEM = "GuildModel.PICK_UP_BOSS_DROP_ITEM" -- 发送社团boss采集协议
|
|
GuildModel.UPDATE_GUILD_BOSS_INFO = "GuildModel.UPDATE_GUILD_BOSS_INFO" -- 更新社团boss状态(社团boss掉落专用)
|
|
GuildModel.START_TO_COLLECT_ITEM = "GuildModel.START_TO_COLLECT_ITEM" -- 社团boss开始采集
|
|
GuildModel.STOP_COLLECT_ITEM = "GuildModel.STOP_COLLECT_ITEM" -- 社团boss中断采集
|
|
GuildModel.PICK_SCENE_DROP_ITEM = "GuildModel.PICK_SCENE_DROP_ITEM" -- 社团boss采集成功
|
|
GuildModel.GUILD_BOSS_DROP_EVENT = "GuildModel.GUILD_BOSS_DROP_EVENT" -- 社团boss掉落事件
|
|
GuildModel.OPEN_BOSS_ROLL_VIEW = "GuildModel.OPEN_BOSS_ROLL_VIEW" -- 打开社团bossroll点界面
|
|
GuildModel.UPDATE_BOSS_ROLL_DATA = "GuildModel.UPDATE_BOSS_ROLL_DATA" -- 更新社团bossroll点界面
|
|
GuildModel.UPDATE_BOSS_ROLL_RECORD = "GuildModel.UPDATE_BOSS_ROLL_RECORD" -- 更新社团bossroll点记录
|
|
GuildModel.UPDATE_GUILD_BOSS_HIGHEST_DATA = "GuildModel.UPDATE_GUILD_BOSS_HIGHEST_DATA" -- 更新社团bossroll点最高记录
|
|
GuildModel.UPDATE_SCENE_FUNCBTN_NUM_RED = "GuildModel.UPDATE_SCENE_FUNCBTN_NUM_RED" -- 更新场景功能按钮的次数红点
|
|
GuildModel.OPEN_BOSS_ROLL_PREVIEW_VIEW = "GuildModel.OPEN_BOSS_ROLL_PREVIEW_VIEW" -- 打开社团boss奖励预览界面
|
|
|
|
GuildModel.OPEN_CSGR_SCENE_VIEW = "GuildModel.OPEN_CSGR_SCENE_VIEW" -- 打开本国团战活动场景界面
|
|
GuildModel.OPEN_CSGR_REWARD_VIEW = "GuildModel.OPEN_CSGR_REWARD_VIEW" -- 打开本国团战奖励预览界面
|
|
GuildModel.OPEN_CSGR_RANK_VIEW = "GuildModel.OPEN_CSGR_RANK_VIEW" -- 打开本国团战伤害排行界面
|
|
GuildModel.OPEN_CSGR_FIGHTINFO_VIEW = "GuildModel.OPEN_CSGR_FIGHTINFO_VIEW" -- 打开本国团战对战信息界面
|
|
GuildModel.UPDATE_CSGR_FIGHTINFO = "GuildModel.UPDATE_CSGR_FIGHTINFO" -- 更新本国团战对战信息
|
|
GuildModel.UPDATE_CSGR_COLLECTBUFF = "GuildModel.UPDATE_CSGR_COLLECTBUFF" -- 更新本国团战采集buff信息
|
|
GuildModel.UPDATE_CSGR_BF_RES = "GuildModel.UPDATE_CSGR_BF_RES" -- 更新本国团战战场资源信息
|
|
GuildModel.UPDATE_CSGR_DMG_RANK = "GuildModel.UPDATE_CSGR_DMG_RANK" -- 更新本国团战输出排行(二级界面)
|
|
GuildModel.UPDATE_CSGR_SCENE_DMG_RANK = "GuildModel.UPDATE_CSGR_SCENE_DMG_RANK" -- 更新本国团战输出排行(活动场景内)
|
|
GuildModel.OPEN_CSGR_RESULT_VIEW = "GuildModel.OPEN_CSGR_RESULT_VIEW" -- 打开本国团战结算界面
|
|
GuildModel.UPDATE_CSGR_BOSS_HP = "GuildModel.UPDATE_CSGR_BOSS_HP" -- 本国团战boss血条推送
|
|
|
|
-- 社团跑环答题
|
|
GuildModel.UPDATE_QUIZ_VIEW_ANSWERING = "GuildModel.UPDATE_QUIZ_VIEW_ANSWERING" -- 更新题目
|
|
GuildModel.UPDATE_QUIZ_VIEW_SHOWING = "GuildModel.UPDATE_QUIZ_VIEW_SHOWING" -- 更新答案展示
|
|
GuildModel.OPEN_GUILD_QUIZ_VIEW = "GuildModel.OPEN_GUILD_QUIZ_VIEW" -- 打开答题界面
|
|
GuildModel.OPEN_GUILD_QUIZ_RESULT_VIEW = "GuildModel.OPEN_GUILD_QUIZ_RESULT_VIEW" -- 打开答题界面
|
|
GuildModel.GUILD_QUIZ_FINISH = "GuildModel.GUILD_QUIZ_FINISH" -- 答题结束了
|
|
|
|
GuildModel.UPDATE_SUPPORT_GUILD_INFO = "GuildModel.UPDATE_SUPPORT_GUILD_INFO" -- 虚空副本信息
|
|
--------------------------------------------------
|
|
-- 社团职位id GuildModel.GuildPosition.Leader
|
|
GuildModel.GuildPosition = {
|
|
Leader = 1, --会长
|
|
ViceLeader = 2,--副会长
|
|
Elite = 3, --战斗精英
|
|
Teasure = 4, --活宝
|
|
Normal = 5, --成员
|
|
Agency = 6, --代理社长
|
|
-- EnterGuild = 66, --进入社团
|
|
}
|
|
-- 社团管理权限 GuildModel.MgrPermission.ChangeAnnounce
|
|
GuildModel.MgrPermission = {
|
|
PassJoinApply = 1, -- 通过加入申请
|
|
PassPosApply = 2, -- 通过职位申请
|
|
KickMember = 3, -- 剔除社团成员
|
|
ChangeAnnounce = 4, -- 修改社团公告
|
|
ChangeApplySetting = 5, -- 修改社团申请设置
|
|
ChangeName = 6, -- 社团改名
|
|
MergeGuild = 7, -- 社团合并
|
|
}
|
|
-- 社团日志类型 GuildModel.LogType.Join
|
|
GuildModel.LogType = {
|
|
Join = 1, -- 1.玩家加入
|
|
Active = 2, -- 2.玩家活跃记录
|
|
Position = 3, -- 3.职位变更
|
|
Upgrade = 4, -- 4.社团升级
|
|
}
|
|
|
|
-- 社团日志模板
|
|
GuildModel.LogStr = {
|
|
[GuildModel.LogType.Join] = "欢迎 <color=#2cf86f>@name</color> 玩家加入本社团,与大家一起建设社团大家庭",
|
|
[GuildModel.LogType.Active] = "<color=#2cf86f>@name</color> 为社团贡献了 <color=#2cf86f>@active</color> 点活跃值,为社团成长添砖加瓦!",
|
|
[GuildModel.LogType.Position] = "社团成员 <color=#2cf86f>@name</color> 玩家职位变更为 <color=#fdffc2>@pos</color> ,以更好地为社团贡献自己的力量",
|
|
[GuildModel.LogType.Upgrade] = "本社团等级提升至 <color=#2cf86f>@upgrade级</color> ,大家的努力有了成效,这一刻的荣耀属于每一个人!",
|
|
}
|
|
|
|
-- 社团商城购买类型 GuildModel.ShopBuyType.NoLimit
|
|
GuildModel.ShopBuyType = {
|
|
NoLimit = 0, -- 不限购
|
|
DayLimit = 1, -- 日限购
|
|
WeekLimit = 2, -- 周限购
|
|
RoleLimit = 3, -- 终生限购
|
|
}
|
|
---------------------------------------------------------
|
|
GuildModel.EXP_GOODS_ID = 38040201
|
|
GuildModel.GuildContributeId = 100004 -- 社团贡献道具id
|
|
GuildModel.GuildContributeType = 8 -- 社团贡献道具货币类型
|
|
|
|
--协助状态
|
|
GuildModel.SupportType = {
|
|
Thank = 1, -- 感谢
|
|
Award = 2, -- 领奖
|
|
}
|
|
|
|
GuildModel.SupportTab = {
|
|
List = 1, -- 列表界面
|
|
Thank = 2, -- 感谢列表
|
|
Gift = 3, -- 收下感谢
|
|
}
|
|
|
|
-- 社团拼单文字说明
|
|
GuildModel.SupportTypeStr = {
|
|
[1] = "协助击杀",
|
|
[2] = "协助击杀",
|
|
[3] = "协助完成",
|
|
[4] = "协助击杀",
|
|
[5] = "协助",
|
|
[6] = "协助",
|
|
}
|
|
|
|
GuildModel.SpellListColor = {
|
|
[1] = "#66abff",
|
|
[2] = "#f558ff",
|
|
[3] = "#feb940",
|
|
}
|
|
-- 需要展示在【活动】界面的【限时活动】都需要配置键值在这里,值为界面节点名称
|
|
GuildModel.EventModuleId = {
|
|
["406@1"] = "GuildEventBossView", -- 社团午间boss
|
|
["406@2"] = "GuildEventBossView", -- 社团晚间boss
|
|
["408@0"] = "GuildEventCollectView", -- 社团午间采集
|
|
["400@7"] = "GuildEventPartyView", -- 社团派对
|
|
["405@1"] = "GuildEventWarView", -- 本服团战
|
|
["410@1"] = "GuildEventCSGuildRankView", -- 本国团战
|
|
["410@2"] = "GuildEventCSGuildRankView", -- 本国团战
|
|
}
|
|
-- EventView的页签加载图片
|
|
GuildModel.EventTabRes = {
|
|
["406@1"] = "guild_event_406_1_pointfilter", -- 社团午间boss
|
|
["406@2"] = "guild_event_406_1_pointfilter", -- 社团晚间boss
|
|
["408@0"] = "guild_event_408_0_pointfilter", -- 社团午间采集
|
|
["400@7"] = "guild_event_400_7_pointfilter", -- 社团派对
|
|
["405@1"] = "guild_event_405_1_pointfilter", -- 本服团战
|
|
["410@1"] = "guild_event_410_1_pointfilter", -- 本国团战
|
|
["410@2"] = "guild_event_410_2_pointfilter", -- 本国团战
|
|
}
|
|
|
|
-- 社团活动玩法类型(前端用)
|
|
GuildEventType = {
|
|
NoonCollect = 4080, -- 午间采集
|
|
GuildBossNoon = 4061,
|
|
GuildBossNight = 4062,
|
|
GuildParty = 4007, -- 社团派对
|
|
GuildTV = 1420, -- 跑马
|
|
GuildWar = 4051, -- 跑马
|
|
GuildCSGR = 410, -- 本国团战
|
|
}
|
|
|
|
-- 社团活动玩法可预告玩法类型,值为按钮图标资源
|
|
GuildTrailerEventType = {
|
|
[GuildEventType.GuildBossNoon] = "icon_406_0",
|
|
[GuildEventType.GuildBossNight] = "icon_406_0",
|
|
[GuildEventType.NoonCollect] = "icon_408_0",
|
|
[GuildEventType.GuildParty] = "icon_400_7",
|
|
-- [GuildEventType.GuildWar] = "icon_405_1",
|
|
-- [GuildEventType.GuildCSGR] = "icon_rightTop_410",
|
|
}
|
|
-- 社团午间/晚间boss排行类型
|
|
GuildBossRankType = {
|
|
Personal = 0,
|
|
Guild = 1,
|
|
}
|
|
-- 社团活动中允许多个时间段存在的活动
|
|
GuildModel.AllowRepeatEvent = {
|
|
[406] = true,
|
|
[408] = true,
|
|
}
|
|
GuildModel.GuildBossId = 651001 -- 社团bossid
|
|
GuildModel.GuildCollectMonId = 650001 -- 封印裂隙怪物id
|
|
GuildModel.GuildCollectModuleId = 408 --社团采集对应模块id
|
|
GuildModel.FEAST_MONSTER_INSTANCE_ID = 1 -- 社团派对中间客户端怪物id
|
|
GuildModel.GuildPowerRankType = 407 -- 社团合并界面的排行请求类型
|
|
GuildModel.GuildActiveRankType = 4002 -- 社团合并界面的排行请求类型
|
|
-- 社团协助感谢言语
|
|
GuildModel.ThankDesc = {
|
|
[1] = "请大佬喝阔乐",
|
|
[2] = "给大佬递茶",
|
|
[3] = "一键三连",
|
|
[4] = "送大佬一个火箭",
|
|
}
|
|
-- 社团权限描述
|
|
GuildModel.PermissionStr = {
|
|
[GuildModel.MgrPermission.PassJoinApply] = "审批入团申请",
|
|
[GuildModel.MgrPermission.PassPosApply] = "审批职位申请",
|
|
[GuildModel.MgrPermission.KickMember] = "踢出团员",
|
|
[GuildModel.MgrPermission.ChangeAnnounce] = "修改社团宣言",
|
|
[GuildModel.MgrPermission.ChangeApplySetting] = "修改社团申请设置",
|
|
[GuildModel.MgrPermission.ChangeName] = "修改社团名称",
|
|
[GuildModel.MgrPermission.MergeGuild] = "管理社团合并",
|
|
}
|
|
-- 社团职位申请节点的职位描述
|
|
GuildModel.PosApplyDesc = {
|
|
[GuildModel.GuildPosition.ViceLeader] =
|
|
{
|
|
"审批入团申请",
|
|
"审批职位申请",
|
|
"踢出团员",
|
|
"修改社团公告",
|
|
"修改社团申请设置",
|
|
},
|
|
[GuildModel.GuildPosition.Elite] = {"该职务暂无权限"},
|
|
[GuildModel.GuildPosition.Teasure] = {"该职务暂无权限"},
|
|
}
|
|
-- 社团boss采集操作类型
|
|
GuildModel.GBossPickOpty = {
|
|
Start = 0,
|
|
Succeed = 1,
|
|
Cancel = 2,
|
|
}
|
|
|
|
-- 本服团战 寻找目标
|
|
GuildModel.GuildWarTarget = {
|
|
Boss = 653001, --boss
|
|
SmallRice = 653002, --粗粮
|
|
BigRice = 653003, --精粮
|
|
MiddleRice = 653004, --中粮
|
|
Npc = 99999999, --npc的集合
|
|
Npc_1 = 410001, --采集任务提交NPC1
|
|
Npc_2 = 410002, --采集任务提交NPC2
|
|
Npc_3 = 410003, --采集任务提交NPC3
|
|
}
|
|
|
|
-- 本服团战 跟随模型id
|
|
GuildModel.GuildWarModelRes = {
|
|
SmallRice = 10020202, --粗粮
|
|
MiddleRice = 10020202, --中粮
|
|
BigRice = 10020202, --精粮
|
|
}
|
|
|
|
-- 本服团战 跟随模型 缩放比例
|
|
GuildModel.GuildWarModelResScale =
|
|
{
|
|
--模型id --缩放比例
|
|
[10020202] = 1.6,
|
|
[10020202] = 1.6,
|
|
[10020202] = 1.6,
|
|
}
|
|
|
|
-- 本国团战对战信息类型
|
|
GuildModel.CSGRRankType = {
|
|
Mine = 0,
|
|
All = 1
|
|
}
|
|
-- 本国团战排行分页大小
|
|
GuildModel.RankPageSize = 10
|
|
GuildModel.FightInfoPageSize = 10
|
|
-- 本国团战专用属性描述
|
|
GuildModel.CSGRAttrName = {
|
|
[19] = "攻击",
|
|
[25] = "暴击",
|
|
[54] = "会心",
|
|
[27] = "技伤",
|
|
}
|
|
-- 社团本国团战中,右侧团员采集信息的颜色配置
|
|
GuildModel.CSGRCollectTipsColorCfg = {
|
|
[19] = ColorUtil.YELLOW_DARK,
|
|
[25] = ColorUtil.RED_DARK,
|
|
[54] = ColorUtil.BLUE_DARK,
|
|
[27] = ColorUtil.PURPLE_DARK,
|
|
}
|
|
-- 采集物nameboard颜色
|
|
GuildModel.CSGRCollectionNameColor = {
|
|
[653101] = ColorUtil.PURPLE_DARK,
|
|
[653102] = ColorUtil.PURPLE_DARK,
|
|
[653103] = ColorUtil.PURPLE_DARK,
|
|
[653104] = ColorUtil.PURPLE_DARK,
|
|
}
|
|
-- 本国团战侧边栏下方阶段描述
|
|
GuildModel.CSGRStageDesc = {
|
|
[1] = "采集物资可给社团所有成员增加对应效果,采集的越多效果越强",
|
|
[2] = "采集物资可给社团所有成员增加对应效果,采集的越多效果越强",
|
|
}
|
|
--封印裂隙奖励预览界面奖励 1|封印裂隙奖励 2|封印魔王触发者奖励 3|封印魔王协助者奖励
|
|
GuildModel.GuildCollectRewardList = {
|
|
[1] = {{100,251008,1},{100,251007,3}},
|
|
[2] = {{100,251008,1},{100,251007,3}},
|
|
[3] = {{100,251008,1},{100,251007,3}},
|
|
}
|
|
|
|
-- 协助感谢类型
|
|
GuildModel.SupportThankType = {
|
|
Normal = 1, -- 通用感谢
|
|
SpellList = 2, -- 拼单感谢
|
|
}
|
|
local GuildModel = GuildModel
|
|
local Config_Guildbadge = Config.Guildbadge
|
|
|
|
function GuildModel:__init()
|
|
GuildModel.Instance = self
|
|
self:ClearData()
|
|
end
|
|
|
|
function GuildModel:getInstance()
|
|
if GuildModel.Instance == nil then
|
|
GuildModel.New();
|
|
end
|
|
return GuildModel.Instance;
|
|
end
|
|
|
|
--清除缓存数据
|
|
function GuildModel:ClearData()
|
|
self.guild_list = {}
|
|
self.base_info = {} -- 社团基础信息
|
|
self.member_list = {}
|
|
self.goods_list = {}
|
|
self.role_permission_list = {} --玩家权限列表
|
|
self.position_num_list = {} -- 当前职位人数
|
|
self.invite_enter_list = {} --邀请入会列表
|
|
self.guild_funds = 0 -- 社团资金
|
|
self.guid_announce = ""
|
|
self.apply_member_list = {}
|
|
self.apply_guild_list = {} -- 申请加入社团玩家列表
|
|
self.apply_pos_list = {} -- 职位申请列表
|
|
self.last_recruit_time = -30 -- 上次发布社团招募信息的时间
|
|
self.last_send_chuanwen_time = -10 -- 上次发布社团传闻的时间
|
|
self.guild_announce_times_data = nil -- 社团公告修改次数信息
|
|
self.guild_kv_cfg = nil
|
|
self.guild_collect_kv_cfg = nil -- 社团采集活动常量配置
|
|
self._need_auto_botting = false -- 切换到社团场景后是否需要自动挂机
|
|
self.guild_event_act_tip_cache = {} -- 社团活动类型提示缓存
|
|
self.history_guild_num = 999 -- 历史最大社团创建数,前五时可享受创建折扣
|
|
self.handle_40071_flag = false --控制40071查询社团数量的标志 1时处理列表界面 2时处理创建界面
|
|
|
|
--社团拍卖提示
|
|
self.guild_auction_hide = true
|
|
self.guild_auction_time = 0
|
|
self.guild_auction_cfg = false
|
|
-------------------
|
|
-- 自动审批的相关内容
|
|
self.approve_type = 0 -- 审批设置0:条件自动加1:手动批准入
|
|
self.auto_approve_lv = 0 --最低等级
|
|
self.auto_approve_power = 0 --最低战力
|
|
-- 社团活跃内容
|
|
self.personal_active = 0 -- 社团个人活跃
|
|
self.personal_stage = 0 -- 社团活跃奖励领取阶段
|
|
self.active_task = {} -- 社团任务进度信息
|
|
self.guild_active = 0 -- 社团总活跃度
|
|
self.guild_active_stage = 0 -- 社团活跃奖励领取阶段
|
|
self.guild_week_stime = 0 -- 本周的活跃开始时间(计算结束时间需要加上7*86400)
|
|
self.guild_log_list = {} -- 社团日志列表
|
|
self.guild_merge_info = nil -- 社团合并信息
|
|
self.guild_merge_apply_cache = {} -- 收到其他社团合并请求的社团id缓存
|
|
--- 社团拼单 ---
|
|
self.guild_sl_data = {} -- 社团拼单信息
|
|
self.guild_cur_sl_orderId = nil -- 当前选中的拼单订单id
|
|
self.guild_cur_sl_order_data = nil -- 当前选中的拼单
|
|
self.guild_sl_invite_time = {} -- 拼单邀请社团成员时间戳
|
|
self.cur_guild_spelllist_thankId = nil -- 当前可以自动感谢的拼单协助id 40048
|
|
self._dont_check_sl_refresh = false -- 是否检查社团拼单刷新
|
|
self._dont_check_sl_invited = false -- 是否检查社团拼单邀请刷新提示
|
|
self._dont_check_sl_high_quality = false -- 是否询问高品质拼单的刷新
|
|
self._is_in_guild_spelllist_view = false -- 是否在社团拼单界面
|
|
--- 社团活动 ---
|
|
self.guild_act_list = nil -- 当日所有活动列表(玩家升级||前端跨天 会清除缓存)
|
|
--- 红点相关 ---
|
|
self.guild_red_cache = {} -- 社团红点缓存
|
|
self.merge_tip_red = false -- 低活跃社团合并提示红点
|
|
self.save_merge_cache_time = false -- 是否立即更新合并时间的缓存
|
|
self.member_refresh_check = true -- 社团主界面人员管理红点首次检查标志
|
|
self.member_apply_red = false -- 社团人员管理申请页签红点
|
|
self.pos_apply_red = false -- 社团人员管理申请页签红点
|
|
self.member_merge_red = false -- 社团人员管理合并按钮红点
|
|
self.guild_order_login_red = true -- 社团拼单登录红点
|
|
self.guild_event_tab_red = {} -- 社团活动红点列表
|
|
self.guild_shop_special_item_red = {} -- 社团特殊商品红点缓存
|
|
self.show_guild_shop_red = true -- 展示社团商店红点(需要满足特定条件)
|
|
self.g_boss_roll_red_num = 0 -- 社团bossroll点红点数量
|
|
-- 社团活动管理
|
|
self.guild_evt_data = {} -- 社团活动数据列表,包括活动开启情况和时间
|
|
--- 社团采集 ---
|
|
self.is_collect_active = false -- 当前采集封印活动是否开启
|
|
self.collect_end_time = 0 -- 本次封印活动的结束时间戳
|
|
self.now_collect_seal_times = 0 -- 本次封印活动的采集次数
|
|
self.collect_left_time = 0 -- 本次封印活动还剩下的时间
|
|
self.guild_collect_ignore_list = {} -- 忽略搜索的采集物id
|
|
self.day_total_collect_times = 0 --当日一共采集的次数,当天最大不超过30次
|
|
self.now_left_collect_mon_count = 0 --场景当前剩余的采集怪数量
|
|
self.guild_collect_helper_info = {}--封印裂隙协助者助战信息
|
|
self.auto_guild_collect_state = 0--自动采集状态 与自动挂机状态互斥 0|关闭 1|开启
|
|
self.now_guild_collect_support_id = 0--当前的封印裂隙唯一协助id
|
|
self.last_chat_collect_support_time = 0--上次在聊天频道喊话的时间戳
|
|
--- 社团boss ---
|
|
self.guild_boss_hp_data = nil -- 社团boss血量信息 40601
|
|
self.guild_boss_rank = {} -- 社团boss社团输出排行
|
|
self.guild_boss_personal_rank = {} -- 社团boss个人排行信息
|
|
self.guild_boss_invincible = nil -- 社团boss狂暴信息
|
|
self.guild_boss_hp_sim = 0 --用于血条显示的模拟血量
|
|
self.encourage_free_times = 0 --免费鼓舞已经使用的次数
|
|
self.encourage_cost_times = 0 --付费鼓舞已经使用的次数
|
|
self.encourage_guild_times = 0 --鼓舞社团加成次数
|
|
self.gboss_col_drop_id = 0 -- 当前社团boss掉落采集道具掉落id
|
|
self.guild_boss_roll_start_time = 0 -- 本轮社团bossroll点的开始时间
|
|
self.guild_boss_roll_data_raw = {} -- 社团bossroll点道具数据(自然键值列表)
|
|
self.guild_boss_roll_data = {} -- 社团bossroll点道具数据
|
|
self.guild_boss_roll_record = {} -- 社团bossroll点记录
|
|
self.guild_boss_roll_finished = false -- 社团bossroll点本轮是否已经结束
|
|
self.guild_boss_role_highest_roleId = {} -- 社团bossroll点最高分数玩家id缓存
|
|
self._gboss_need_show_claim_red = false -- 社团bossroll点界面不存在时是否需要提示roll点按钮红点
|
|
-- self.gboss_roll_result = {} -- 社团bossroll点结算信息缓存
|
|
-- self.gboss_roll_result_cdtimer_id = nil
|
|
-- self.is_in_gboss_result_cd = false
|
|
--社团协助相关---
|
|
self.guild_support_info = {} -- 社团协助信息列表
|
|
self.guild_support_award_info = {}--社团协助奖励信息列表
|
|
self.guild_support_cfg = {} --社团协助配置信息
|
|
self.guild_support_thank_cfg_id = nil--当前感谢的礼包唯一ID
|
|
self.guild_daliy_reputation = nil--每日获得的名望券数量
|
|
self.self_support_sid = 0--自己的社团协助ID
|
|
self.support_thank_list = {}--协助感谢列表
|
|
self.support_gift_list = {}--协助感谢领取列表
|
|
self.support_red_list = {}--协助感谢领取列表
|
|
self.cur_choose_thank_data = nil
|
|
self.is_start_open_support_continue = nil
|
|
self.support_is_self_send = false--协助是否是自己发送的
|
|
self:InitGuildSupportCfg()
|
|
-- 社团派对相关 --
|
|
self.guild_party_exp_radio_cfg = nil
|
|
self.guild_party_exp = 0 -- 社团派对累计经验值
|
|
self.guild_party_exp_eff = 0 -- 社团派对每分钟的预测奖励经验值
|
|
self.self_support_status = 0 -- 协助状态
|
|
self.guild_scene_mem_num = 0 -- 驻地内玩家人数
|
|
self.guild_party_radio = 0 -- 驻地内玩家人数经验效率(万分比)
|
|
--本服团战相关
|
|
self.guild_war_info = {} --本服团战数据
|
|
-- 本国团战相关
|
|
self.csgr_kv_config = nil -- 本国团战常量配置
|
|
self.csgr_guild_reward_cfg = nil -- 本国团战社团奖励配置
|
|
self.csgr_guild_reward_cfg_normal = nil -- 本国团战社团奖励配置(其他战场)
|
|
self.csgr_role_reward_cfg = nil -- 本国团战玩家奖励配置
|
|
self.csgr_fight_info = nil -- 本轮本国团战同战场公会信息
|
|
self.csgr_collect_buff = {} -- 本轮本国团战社团已经采集到的buff信息
|
|
self.csgr_bf_res = {} -- 本轮本国团战战场内物资信息
|
|
self.csgr_bf_res_refreshtime = 0 -- 战场物资刷新时间戳
|
|
self.guild_csgr_result_data = nil -- 本国团战结算信息
|
|
self.csgr_result_data = nil -- 本国团战结算协议信息
|
|
self.csgr_scene_last_pos = Vector2(0, 0) -- 本国团战上一帧的坐标
|
|
self.csgr_collect_cfg_data = nil -- 本国团战采集怪坐标(顺序表)
|
|
self.csgr_collect_cfg_data2 = nil -- 本国团战采集怪坐标(attr_id键值表)
|
|
self.csgr_auto_collect = false -- 本国团战自动采集标志量
|
|
self.need_show_sos = false--默认展示SOS协助图标
|
|
|
|
|
|
self.war_active_show_red_dot = {} --战场活动提示红点缓存
|
|
end
|
|
|
|
function GuildModel:ClearActList( )
|
|
self.guild_act_list = nil
|
|
end
|
|
|
|
-- 配置相关 start
|
|
-- 获取社团常量配置内容
|
|
function GuildModel:GetGuildKvByKey(key)
|
|
if not self.guild_kv_cfg then
|
|
self.guild_kv_cfg = {}
|
|
local temp_key
|
|
for k, v in pairs(Config.Guildkv) do
|
|
temp_key = Trim(v.key)
|
|
self.guild_kv_cfg[temp_key] = v
|
|
end
|
|
end
|
|
return self.guild_kv_cfg[key]
|
|
end
|
|
|
|
-- 获取社团采集活动常量配置内容
|
|
function GuildModel:GetGuildCollectKvByKey(key)
|
|
if not self.guild_collect_kv_cfg then
|
|
self.guild_collect_kv_cfg = {}
|
|
local temp_key
|
|
for k, v in pairs(Config.Guildcollectkv) do
|
|
temp_key = Trim(v.key)
|
|
self.guild_collect_kv_cfg[temp_key] = v
|
|
end
|
|
end
|
|
return self.guild_collect_kv_cfg[key]
|
|
end
|
|
|
|
-- 获取社团徽章加成信息
|
|
-- type:徽章类型,存在该字段时返回当前社团存在的最高加成的属性值,否则直接返回协议返回的徽章列表
|
|
function GuildModel:GetGuildBadgeInfo(type)
|
|
local badge_list = self.base_info and self.base_info.badges or {}
|
|
if type then
|
|
local cfg
|
|
for k, v in ipairs(badge_list) do
|
|
cfg = Config_Guildbadge[v.id]
|
|
-- 存在目标类型的配置时,返回配置的加成值,具体值单位还要参考配置
|
|
if cfg and cfg.type == type then
|
|
return cfg.effect
|
|
end
|
|
end
|
|
return 0
|
|
else
|
|
return badge_list
|
|
end
|
|
end
|
|
|
|
-- 根据开服天数获取合并社团限制配置
|
|
function GuildModel:GetGuildMergeConditionCfg( )
|
|
local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
|
|
local merge_condition = nil
|
|
for k, v in pairs(Config.Guildmerge) do
|
|
if v.min_day <= open_day and v.max_day >= open_day then
|
|
merge_condition = v
|
|
break
|
|
end
|
|
end
|
|
return merge_condition
|
|
end
|
|
|
|
--保存历史社团最大创建数
|
|
function GuildModel:SetHistoryGuildNum(vo)
|
|
self.history_guild_num = vo.history_guild_num
|
|
end
|
|
|
|
--当前是否创建社团折扣期
|
|
function GuildModel:IsInCreateGuildDiscount( )
|
|
local total_num = stringtotable(self:GetGuildKvByKey("create_guild_discount").val)[1]
|
|
return self.history_guild_num < total_num
|
|
end
|
|
|
|
-- 获取社团商城物品配置
|
|
function GuildModel:GetGuildShopGoodsCfg( )
|
|
self.guild_shop_cfg = self.guild_shop_cfg or {}
|
|
if IsTableEmpty(self.guild_shop_cfg) then
|
|
local lv = RoleManager.Instance.mainRoleInfo.level
|
|
local guild_lv = self.base_info.guild_lv or 0
|
|
for k, v in pairs(Config.Guildcargo) do
|
|
if v.lv_min <= lv and v.lv_max >= lv then -- 只显示符合等级区间的商品
|
|
v.lock_guild = guild_lv < v.guild_lv
|
|
end
|
|
self.guild_shop_cfg[#self.guild_shop_cfg+1] = v
|
|
end
|
|
end
|
|
return self.guild_shop_cfg
|
|
end
|
|
-- 清空社团商店缓存
|
|
function GuildModel:ClearGuildShopCfgCache( )
|
|
self.guild_shop_cfg = nil
|
|
end
|
|
|
|
-- 获取社团活跃任务状态
|
|
function GuildModel:GetGuildActiveTaskCfg( )
|
|
--今天是星期几
|
|
local cur_weekday = tonumber(os.date("%w", TimeUtil:getServerTime()))
|
|
cur_weekday = cur_weekday ~= 0 and cur_weekday or 7
|
|
local tb = {}
|
|
local task_data = nil
|
|
local sort_weight = { -- 根据领取状态获得排序权重
|
|
[0] = 1, -- 未完成
|
|
[1] = 2, -- 可领取
|
|
[2] = 0, -- 已完成
|
|
}
|
|
for k, v in pairs(Config.Guildtask) do
|
|
local day_condition = stringtotable(v.days)
|
|
if IsTableEmpty(day_condition) then
|
|
task_data = self:GetGuildActiveTaskData(v.id)
|
|
local state = task_data and task_data.state or 0
|
|
v.sort_weight = sort_weight[state]
|
|
tb[#tb+1] = v
|
|
else
|
|
for k2, v2 in pairs(day_condition) do
|
|
if v2 == cur_weekday then
|
|
task_data = self:GetGuildActiveTaskData(v.id)
|
|
local state = task_data and task_data.state or 0
|
|
v.sort_weight = sort_weight[state]
|
|
tb[#tb+1] = v
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
-- 根据领取状态排序
|
|
local sort_func = function ( a, b )
|
|
if a.sort_weight == b.sort_weight then
|
|
return a.id < b.id
|
|
else
|
|
return a.sort_weight > b.sort_weight
|
|
end
|
|
end
|
|
table.sort(tb, sort_func)
|
|
return tb
|
|
end
|
|
|
|
-- 获取社团活跃配置
|
|
function GuildModel:GetActiveRewardCfg( )
|
|
local tb = {}
|
|
local target_cfg = Config.Guildtaskguildaward
|
|
local guild_lv = self.base_info.guild_lv or 1
|
|
local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
|
|
|
|
for k, v in pairs(target_cfg) do
|
|
if guild_lv >= v.glv_min and guild_lv <= v.glv_max -- 社团等级满足需求
|
|
and open_day >= v.day_min and open_day <= v.day_max then -- 开服天数满足需求
|
|
tb[#tb+1] = v
|
|
end
|
|
end
|
|
local sort_func = function ( a, b )
|
|
return a.id < b.id
|
|
end
|
|
table.sort(tb, sort_func)
|
|
return tb
|
|
end
|
|
|
|
-- 根据星期数获取当天社团活动
|
|
function GuildModel:GetGuildEventByWday(wday)
|
|
-- if not wday then return nil end
|
|
-- 获取今天全部限时活动数据
|
|
if not self.guild_act_list then
|
|
local all_act = Config.Ac
|
|
local key
|
|
local role_lv = RoleManager.Instance.mainRoleInfo.level
|
|
self.guild_act_list = {}
|
|
local act_list = DailyModel:getInstance():GetWeekCalendarInfo(true) -- 获取限时活动的日历
|
|
-- 处理限时活动的部分
|
|
for k, wday_evt in ipairs(act_list) do
|
|
for k2, evt in ipairs(wday_evt) do
|
|
if type(evt) == "table" then
|
|
key = evt.module_id .. "@" .. evt.module_sub
|
|
if GuildModel.EventModuleId[key]
|
|
and Config.Moduleid[evt.module_id]
|
|
and Config.Moduleid[evt.module_id].open_lv <= role_lv then -- 2020年3月18日新增活动对等级的要求判断
|
|
evt.time_str = wday_evt[1] -- 第一条内容是活动时间
|
|
self.guild_act_list[k2 - 1] = self.guild_act_list[k2 - 1] or {}
|
|
self:CheckRepeatEvt(self.guild_act_list[k2 - 1], evt)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if wday then
|
|
return self.guild_act_list[wday] or {}
|
|
else
|
|
return self.guild_act_list
|
|
end
|
|
end
|
|
-- 检查同一活动多个时间段开启的情况,这个时候只保留第一个
|
|
function GuildModel:CheckRepeatEvt(list, evt )
|
|
-- 判断该社团活动是不是不可以同时在活动界面中存在多个的活动
|
|
if not GuildModel.AllowRepeatEvent[evt.module_id] then
|
|
for k, v in pairs(list) do
|
|
if v.module_id == evt.module_id and v.module_sub == evt.module_sub then
|
|
return
|
|
end
|
|
end
|
|
end
|
|
table.insert(list, evt)
|
|
end
|
|
|
|
-- 获取目标社团活动的开启时间,格式为周x、x、x 开始时间
|
|
-- time_only 只需要活动的时间
|
|
function GuildModel:GetGuildEventOpenTime(module_id, module_sub, ac_sub, time_only)
|
|
if not module_id or not module_sub then return "" end
|
|
ac_sub = ac_sub or 1
|
|
local all_list = self:GetGuildEventByWday()
|
|
local str, day_num, start_time, end_time = "", 0, "", ""
|
|
-- 这里有可能存在开服的前几天没有活动的情况,所以要用pairs
|
|
for k, wday_evt in pairs(all_list) do -- 7天的总活动列表
|
|
for k2, evt in ipairs(wday_evt) do -- 每天的活动列表
|
|
if evt.module_id == module_id and evt.module_sub == module_sub and evt.ac_sub == ac_sub then
|
|
day_num = day_num + 1
|
|
str = str .. (day_num <= 1 and "周" or "、") .. TimeUtil:GetWeekStrNum(k)
|
|
if start_time == "" then
|
|
start_time = Split(evt.time_str, "~")[1]
|
|
end_time = Split(evt.time_str, "~")[2]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if time_only then
|
|
local start_time_tb = Split(start_time, ":")
|
|
local s_hour, s_min = tonumber(start_time_tb[1]), start_time_tb[2] == "00" and 0 or tonumber(start_time_tb[2])
|
|
local end_time_tb = Split(end_time, ":")
|
|
local e_hour, e_min = tonumber(end_time_tb[1]), end_time_tb[2] == "00" and 0 or tonumber(end_time_tb[2])
|
|
return s_hour, s_min, e_hour, e_min
|
|
else
|
|
if day_num >= TableSize(all_list) then
|
|
str = "每日"
|
|
end
|
|
return str .. " <color=#2CF86F>" .. start_time .."-"..end_time.."</color>,限时开启", str
|
|
end
|
|
end
|
|
|
|
--获取封印裂隙的开启时间(时间列表中没有区分活动场次的字段,只能特殊处理)
|
|
function GuildModel:GetGuildEventCollectOpenTime(index,time_only)--index:场次
|
|
local module_id = 408
|
|
local module_sub = 0
|
|
local all_list = self:GetGuildEventByWday()
|
|
local str, day_num, start_time, end_time = "", 0, "", ""
|
|
-- 这里有可能存在开服的前几天没有活动的情况,所以要用pairs
|
|
local collect_list = {}
|
|
for k, wday_evt in pairs(all_list) do -- 7天的总活动列表
|
|
for k2, evt in ipairs(wday_evt) do -- 每天的活动列表
|
|
if evt.module_id == module_id and evt.module_sub == module_sub then
|
|
day_num = day_num + 1
|
|
str = str .. (day_num <= 1 and "周" or "、") .. TimeUtil:GetWeekStrNum(k)
|
|
table.insert(collect_list,evt)
|
|
end
|
|
end
|
|
end
|
|
if start_time == "" and collect_list[index] then
|
|
start_time = Split(collect_list[index].time_str, "~")[1]
|
|
end_time = Split(collect_list[index].time_str, "~")[2]
|
|
end
|
|
if time_only then
|
|
local start_time_tb = Split(start_time, ":")
|
|
local s_hour, s_min = tonumber(start_time_tb[1]), start_time_tb[2] == "00" and 0 or tonumber(start_time_tb[2])
|
|
local end_time_tb = Split(end_time, ":")
|
|
local e_hour, e_min = tonumber(end_time_tb[1]), end_time_tb[2] == "00" and 0 or tonumber(end_time_tb[2])
|
|
return s_hour, s_min, e_hour, e_min
|
|
else
|
|
if day_num >= TableSize(all_list) then
|
|
str = "每日"
|
|
end
|
|
return str .. " <color=#2CF86F>" .. start_time .."-"..end_time.."</color>,限时开启"
|
|
end
|
|
end
|
|
|
|
--找某个活动的持续时间总长
|
|
function GuildModel:GetGuildEventStayTime(module_id, module_sub, ac_sub)
|
|
ac_sub = ac_sub or 1
|
|
local s_hour, s_min, e_hour, e_min = self:GetGuildEventOpenTime(module_id,module_sub,ac_sub,true)
|
|
local stay_time = 0
|
|
if e_hour > s_hour then
|
|
stay_time = e_min + 60*(e_hour-s_hour) - s_min
|
|
else
|
|
stay_time = e_min - s_min
|
|
end
|
|
return stay_time * 60
|
|
end
|
|
|
|
--获取社团boss常量表
|
|
function GuildModel:GetGuildBossKV(key)
|
|
return Config.Guildbosskv[key].value
|
|
end
|
|
|
|
--初始化协助配置
|
|
function GuildModel:InitGuildSupportCfg( )
|
|
self.guild_support_cfg = {}
|
|
local cfg_data = DeepCopy(Config.Guildsupport)
|
|
for k,v in pairs(cfg_data) do
|
|
local data = v
|
|
data.mod_name = Trim(data.mod_name)
|
|
data.thank_reward = stringtotable(v.thank_reward)--进入条件
|
|
data.support_reward = stringtotable(v.support_reward)--协助奖励
|
|
self.guild_support_cfg[v.support_id] = data
|
|
end
|
|
end
|
|
--得到协助配置
|
|
function GuildModel:GetGuildSupportCfg( support_id )
|
|
return self.guild_support_cfg[support_id]
|
|
end
|
|
--得到协助配置
|
|
function GuildModel:OpenGuildSupportThankView( )
|
|
local function func()
|
|
if #self.guild_support_award_info == 0 then
|
|
if self.support_time_id then
|
|
GlobalTimerQuest:CancelQuest(self.support_time_id)
|
|
self.support_time_id = nil
|
|
end
|
|
end
|
|
if #self.guild_support_award_info > 0 and GuildController.Instance
|
|
and (GuildController.Instance.GuildSupportThankView and not GuildController.Instance.GuildSupportThankView:HasOpen()
|
|
or not GuildController.Instance.GuildSupportThankView)
|
|
then
|
|
if self.support_time_id then
|
|
GlobalTimerQuest:CancelQuest(self.support_time_id)
|
|
self.support_time_id = nil
|
|
end
|
|
GuildModel:getInstance():Fire(GuildModel.OPEN_GUILD_SUPPORT_THANK_VIEW,GuildModel.SupportType.Award)
|
|
end
|
|
end
|
|
if not self.support_time_id then
|
|
self.support_time_id = GlobalTimerQuest:AddPeriodQuest(func,0.5)
|
|
end
|
|
end
|
|
--获得玩法名望券
|
|
function GuildModel:GetPlayReputation( module_id,module_sub )
|
|
for k,v in pairs(self.guild_support_cfg) do
|
|
if v.module_id == module_id and v.sub_mod_id == module_sub then
|
|
return v.reward_reputation
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 获取本国团战的常量配置
|
|
function GuildModel:GetCSGRConfigByKey(key)
|
|
if not self.csgr_kv_config then
|
|
self.csgr_kv_config = {}
|
|
local temp_key
|
|
for k, v in pairs(Config.Campwarkv) do
|
|
temp_key = Trim(v.key)
|
|
self.csgr_kv_config[temp_key] = v
|
|
end
|
|
end
|
|
return self.csgr_kv_config[key]
|
|
end
|
|
|
|
function GuildModel:GetCSGRRankRewardCfg( )
|
|
local sort_func = function ( a, b )
|
|
return a.rank_min < b.rank_min
|
|
end
|
|
if not self.csgr_role_reward_cfg then
|
|
self.csgr_role_reward_cfg = {}
|
|
local temp_tb
|
|
for k, v in pairs(Config.Campwarrolerankreward) do
|
|
temp_tb = DeepCopy(v)
|
|
temp_tb.rewards = stringtotable(v.rewards)
|
|
self.csgr_role_reward_cfg[#self.csgr_role_reward_cfg+1] = temp_tb
|
|
end
|
|
table.sort(self.csgr_role_reward_cfg, sort_func)
|
|
end
|
|
if not self.csgr_guild_reward_cfg or not self.csgr_guild_reward_cfg_normal then
|
|
self.csgr_guild_reward_cfg = {}
|
|
self.csgr_guild_reward_cfg_normal = {}
|
|
local temp_tb
|
|
for k, v in pairs(Config.Campwarrankreward) do
|
|
temp_tb = DeepCopy(v)
|
|
temp_tb.rewards = stringtotable(v.rewards)
|
|
if v.arena_id == 1 then -- 1号战场
|
|
self.csgr_guild_reward_cfg[#self.csgr_guild_reward_cfg+1] = temp_tb
|
|
else
|
|
self.csgr_guild_reward_cfg_normal[#self.csgr_guild_reward_cfg_normal+1] = temp_tb
|
|
end
|
|
end
|
|
table.sort(self.csgr_guild_reward_cfg, sort_func)
|
|
table.sort(self.csgr_guild_reward_cfg_normal, sort_func)
|
|
end
|
|
return self.csgr_guild_reward_cfg, self.csgr_guild_reward_cfg_normal, self.csgr_role_reward_cfg
|
|
end
|
|
|
|
-- 初始化社团派对挂机效率万分比配置
|
|
function GuildModel:GetGuildPartyEffRadioCfg( )
|
|
if not self.guild_party_exp_radio_cfg then
|
|
self.guild_party_exp_radio_cfg = {}
|
|
for k, v in pairs(Config.Guildtriberadio) do
|
|
self.guild_party_exp_radio_cfg[#self.guild_party_exp_radio_cfg+1] = v
|
|
end
|
|
local sort_func = function ( a, b )
|
|
return a.num_min < b.num_min
|
|
end
|
|
table.sort(self.guild_party_exp_radio_cfg, sort_func)
|
|
end
|
|
return self.guild_party_exp_radio_cfg
|
|
end
|
|
-- 配置相关 end
|
|
|
|
--------- 社团协议相关代码 start ---------
|
|
-- 设置社团的基本信息 40005
|
|
function GuildModel:SetGuildBaseInfo(vo)
|
|
self.base_info = vo
|
|
self:SortGuildBadge(vo.badges)
|
|
end
|
|
function GuildModel:GetGuildBaseInfo( )
|
|
return self.base_info
|
|
end
|
|
-- 排序社团徽章的顺序
|
|
function GuildModel:SortGuildBadge(badge_list)
|
|
if badge_list then
|
|
-- 补齐没有勋章的情况
|
|
local has_badge1, has_badge2, has_badge3
|
|
local temp_cfg = nil
|
|
for k, v in pairs(badge_list) do
|
|
temp_cfg = Config_Guildbadge[v.id]
|
|
if temp_cfg.type == 1 then
|
|
has_badge1 = true
|
|
elseif temp_cfg.type == 6 then
|
|
has_badge2 = true
|
|
elseif temp_cfg.type == 2 then
|
|
has_badge3 = true
|
|
end
|
|
end
|
|
if not has_badge1 then
|
|
badge_list[#badge_list + 1] = {id = 1001, start_time = 0, end_time = 0}
|
|
end
|
|
if not has_badge2 then
|
|
badge_list[#badge_list + 1] = {id = 2001, start_time = 0, end_time = 0}
|
|
end
|
|
if not has_badge3 then
|
|
badge_list[#badge_list + 1] = {id = 3001, start_time = 0, end_time = 0}
|
|
end
|
|
-- 排序
|
|
local sort_func = function ( a, b )
|
|
return a.id < b.id
|
|
end
|
|
table.sort(badge_list, sort_func)
|
|
end
|
|
end
|
|
-- 获取社团的成员列表 40006
|
|
function GuildModel:SetGuildMemberList(vo)
|
|
self.member_list = vo
|
|
end
|
|
function GuildModel:GetGuildMemberList( )
|
|
return self.member_list
|
|
end
|
|
|
|
-- 设置社团的申请列表 40008
|
|
function GuildModel:SetApplyMemberListData(vo)
|
|
local sort_func = function ( a, b )
|
|
return a.time < b.time
|
|
end
|
|
table.sort(vo, sort_func)
|
|
self.apply_member_list = vo
|
|
self:SetApplyDataSpiltJoinAndPos(vo)
|
|
end
|
|
function GuildModel:GetApplyMemberListData( )
|
|
return self.apply_member_list
|
|
end
|
|
-- 筛选区分加入社团和职位申请的申请信息
|
|
function GuildModel:SetApplyDataSpiltJoinAndPos(vo)
|
|
if not vo then return end
|
|
self.apply_guild_list = {}
|
|
self.apply_pos_list = {}
|
|
for k, v in ipairs(vo) do
|
|
if v.position == 0 then
|
|
self.apply_guild_list[#self.apply_guild_list+1] = v
|
|
else
|
|
self.apply_pos_list[#self.apply_pos_list+1] = v
|
|
end
|
|
end
|
|
end
|
|
function GuildModel:GetApplyGuildMemData( )
|
|
return self.apply_guild_list
|
|
end
|
|
function GuildModel:GetApplyPosMemData( )
|
|
return self.apply_pos_list
|
|
end
|
|
|
|
-- 更新申请列表 40009 40014
|
|
function GuildModel:UpdateApplyMemberList(vo)
|
|
for k, v in pairs(self.apply_member_list) do
|
|
if v.role_id == vo.role_id then
|
|
table.remove(self.apply_member_list, k)
|
|
break
|
|
end
|
|
end
|
|
for k, v in pairs(self.apply_guild_list) do
|
|
if v.role_id == vo.role_id then
|
|
table.remove(self.apply_guild_list, k)
|
|
break
|
|
end
|
|
end
|
|
for k, v in pairs(self.apply_pos_list) do
|
|
if v.role_id == vo.role_id then
|
|
table.remove(self.apply_pos_list, k)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 设置社团自动加入相关内容 40010
|
|
function GuildModel:SetAutoApproveData(vo)
|
|
self.approve_type = vo.approve_type
|
|
self.auto_approve_lv = vo.auto_approve_lv
|
|
self.auto_approve_power = vo.auto_approve_power
|
|
end
|
|
|
|
-- 设置社团公告 40012
|
|
function GuildModel:SetGuildAnnounce(guid_announce)
|
|
self.guid_announce = Trim(guid_announce)
|
|
end
|
|
function GuildModel:UpdateGuildBasicInfoAnnounce(guid_announce)
|
|
if self.base_info then
|
|
self.base_info.announce = guid_announce
|
|
end
|
|
end
|
|
function GuildModel:GetGuildAnnounce( )
|
|
return self.guid_announce
|
|
end
|
|
|
|
-- 更新社团玩家职位信息 40013
|
|
function GuildModel:UpdateMemberPositionData( vo )
|
|
for k, v in pairs(self.member_list) do
|
|
if v.role_id == vo.role_id then
|
|
v.position = vo.position
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 更新玩家所在的社团信息 40015
|
|
function GuildModel:UpdateGuildBaseInfo(vo)
|
|
self.base_info.guild_id = vo.guild_id
|
|
self.base_info.guild_name = vo.guild_name
|
|
-- self.base_info.guild_lv = vo.guild_lv
|
|
end
|
|
|
|
-- 设置社团公告修改次数信息 40019
|
|
function GuildModel:SetGuildAnnounceTimesData(vo)
|
|
self.guild_announce_times_data = self.guild_announce_times_data or {}
|
|
self.guild_announce_times_data.remain_times = vo.remain_times
|
|
self.guild_announce_times_data.free_times = vo.free_times
|
|
end
|
|
function GuildModel:GetGuildAnnounceTimesData( )
|
|
return self.guild_announce_times_data
|
|
end
|
|
|
|
--设置玩家的权限 40021
|
|
function GuildModel:SetRolePermission(vo)
|
|
self.role_permission_list = {}
|
|
local len = #vo.permission_type_list
|
|
local permission
|
|
for i = 1,len do
|
|
permission = vo.permission_type_list[i]["permission_type"]
|
|
if permission then
|
|
table.insert(self.role_permission_list,permission)
|
|
end
|
|
end
|
|
self:Fire(GuildModel.RefreshPermissionListEvt)
|
|
end
|
|
--检测玩家是否有当前权限
|
|
function GuildModel:HasOperatePermission(permission)
|
|
local len = #self.role_permission_list
|
|
local vo
|
|
for i = 1,len do
|
|
vo = self.role_permission_list[i]
|
|
if tonumber(vo) == tonumber(permission) then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
-- 检测玩家是否对目标职位由任命权限
|
|
function GuildModel:HasAppointPremission(target_pos, cur_pos)
|
|
cur_pos = cur_pos or RoleManager.Instance.mainRoleInfo.position
|
|
if cur_pos > GuildModel.GuildPosition.ViceLeader then return false end
|
|
if cur_pos == GuildModel.GuildPosition.ViceLeader then return cur_pos < target_pos end
|
|
if cur_pos == GuildModel.GuildPosition.Leader then return true end
|
|
end
|
|
|
|
--设置当前职位人数 40023
|
|
function GuildModel:SetCurrentPostNumInfo(vo)
|
|
self.position_num_list = vo.position_num_list
|
|
end
|
|
|
|
-- 修改社团名称和社团旗帜 40025
|
|
function GuildModel:UpdateGuildNameAndFlag(vo)
|
|
if self.base_info then
|
|
self.base_info.guild_name = vo.guild_name
|
|
self.base_info.guild_flag = vo.guild_flag
|
|
end
|
|
end
|
|
function GuildModel:GetGuildFlag( )
|
|
local flag = 0
|
|
if self.base_info then
|
|
flag = self.base_info.guild_flag or 0
|
|
end
|
|
return flag
|
|
end
|
|
|
|
--获取当前职位人数
|
|
function GuildModel:GetMemberNum(position)
|
|
local num = 0
|
|
for k, v in pairs(self.member_list) do
|
|
if v.position == position then
|
|
num = num + 1
|
|
end
|
|
end
|
|
return num
|
|
-- local len = #self.position_num_list
|
|
-- local vo
|
|
-- for i = 1,len do
|
|
-- vo = self.position_num_list[i]
|
|
-- if vo.position == position then
|
|
-- return vo.num
|
|
-- end
|
|
-- end
|
|
-- return 0
|
|
end
|
|
|
|
-- 设置商城商品信息 40027
|
|
function GuildModel:SetGuildShopGoodsList(goods_list)
|
|
self.goods_list = {}
|
|
local shop_cfg = self:GetGuildShopGoodsCfg()
|
|
local temp_goods_list = {}
|
|
for k, v in pairs(goods_list) do
|
|
temp_goods_list[v.id] = v
|
|
end
|
|
for k, cfg in ipairs(shop_cfg) do
|
|
-- 获取该商品的购买记录
|
|
local buy_record = temp_goods_list[cfg.id]
|
|
cfg.buy_num = buy_record and buy_record.buyed or 0
|
|
cfg.can_buy = cfg.type == GuildModel.ShopBuyType.NoLimit or cfg.buy_num < cfg.num
|
|
self.goods_list[k] = cfg
|
|
end
|
|
self:SortGuildShopData()
|
|
end
|
|
function GuildModel:SortGuildShopData( )
|
|
local sort_func = function ( a, b )
|
|
if a.lock_guild ~= b.lock_guild then -- 被锁定的在后
|
|
return not a.lock_guild
|
|
elseif a.can_buy ~= b.can_buy then -- 可购买的在前
|
|
return a.can_buy
|
|
else
|
|
if a.type ~= b.type then -- 购买类型大的在前
|
|
return a.type > b.type
|
|
else
|
|
return a.id < b.id
|
|
end
|
|
end
|
|
end
|
|
table.sort(self.goods_list, sort_func)
|
|
end
|
|
|
|
function GuildModel:GetGuildShopGoodsList( )
|
|
return self.goods_list
|
|
end
|
|
|
|
-- 更新社团商店数据 40028
|
|
function GuildModel:UpdateGuildShopData( vo )
|
|
-- 如果还没有物品列表则不进行处理,直接通过40027协议获得最新的信息
|
|
if IsTableEmpty(self.goods_list) then return end
|
|
for k, v in ipairs(self.goods_list) do
|
|
if v.id == vo.id then
|
|
v.buy_num = v.buy_num + vo.num -- 注意这里服务端返回的是我刚刚买了几个
|
|
v.can_buy = v.type == GuildModel.ShopBuyType.NoLimit or v.buy_num < v.num
|
|
break
|
|
end
|
|
end
|
|
self:SortGuildShopData()
|
|
end
|
|
|
|
-- 更新社团经验值和等级 40029
|
|
function GuildModel:UpdateGuildExpAndLv( vo )
|
|
if not vo then return end
|
|
self.base_info.guild_lv = vo.guild_lv
|
|
self.base_info.guild_exp = vo.guild_exp
|
|
end
|
|
|
|
-- 单独更新社团成员的在线情况
|
|
function GuildModel:UpdateGuildMemberOnlineFlag(vo)
|
|
if vo and self.member_list then
|
|
for k, v in pairs(self.member_list) do
|
|
if v.role_id == vo.role_id then
|
|
v.online_flag = vo.online_flag
|
|
-- 前端根据在线状态直接更新离线时间
|
|
v.offline_time = v.online_flag ~= 1 and TimeUtil:getServerTime() or 0
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 获取社团合并信息 40032
|
|
function GuildModel:SetGuildMergeInfo( vo )
|
|
-- 新获得的合并信息是被其他社团申请合并的信息,则重置刷新红点的限制
|
|
for k, v in ipairs(vo.fapplys) do
|
|
if not self.guild_merge_apply_cache[v.guild_id] then
|
|
self.member_refresh_check = true
|
|
end
|
|
self.guild_merge_apply_cache[v.guild_id] = true
|
|
end
|
|
-- if self.guild_merge_info and self.guild_merge_info.iden ~= vo.iden and vo.iden == 2 then
|
|
-- self.member_refresh_check = true
|
|
-- end
|
|
self.guild_merge_info = vo
|
|
end
|
|
function GuildModel:GetGuildMergeInfo( )
|
|
return self.guild_merge_info
|
|
end
|
|
-- 清空社团合并请求的缓存
|
|
function GuildModel:ClearMergeInfoCache( )
|
|
self.guild_merge_info = nil
|
|
end
|
|
|
|
-- 获取社团拼单任务列表 40035
|
|
-- 拼单的规则比较杂,简单来讲首先是需要拿到35协议的拼单,每次选中一个拼单都要发送40036协议(opty:0)定位到拼单信息开始邀请社员
|
|
-- 邀请成员后,人满可以开始任务,也是发送40036协议(opty:1)
|
|
-- 完成任务后方可自动领取奖励,弹出结算界面,并进入感谢参与社员阶段
|
|
function GuildModel:SetGuildSpellListData(vo)
|
|
local sort_func = function ( a, b )
|
|
return a.order < b.order
|
|
end
|
|
table.sort(vo.guild_orders, sort_func)
|
|
|
|
self.guild_sl_data = vo
|
|
self:ChooseOrReqGreastestOrder()
|
|
end
|
|
|
|
-- 选出当前或者可切换的最高级的拼单
|
|
function GuildModel:ChooseOrReqGreastestOrder( )
|
|
-- 获取当前选中的拼单信息
|
|
local lastest_sl, get_cur_sl = nil, false
|
|
local highest_sl, highest_sl_color = nil, nil
|
|
local temp_cfg = nil
|
|
for k, v in ipairs(self.guild_sl_data.guild_orders) do
|
|
if v.state == 1 or v.state == 2 then
|
|
self.guild_cur_sl_order_data = v
|
|
self.guild_cur_sl_orderId = v.order
|
|
get_cur_sl = true
|
|
break
|
|
end
|
|
if v.state >= 3 and (not lastest_sl or lastest_sl.ftime < v.ftime) then
|
|
lastest_sl = v
|
|
end
|
|
temp_cfg = Config.Guildorder[v.cfg]
|
|
if temp_cfg and v.state == 0 and (not highest_sl_color or highest_sl_color < temp_cfg.color) then
|
|
highest_sl = v.order
|
|
highest_sl_color = temp_cfg.color
|
|
end
|
|
end
|
|
-- 如果没有当前进行中的拼单,则判断还有没有剩余次数,有的话自动接取最高级的拼单,否则固定最后一个拼单结果
|
|
if not get_cur_sl then
|
|
local total_num = self:GetGuildKvByKey("accept_limit").val
|
|
if self.guild_sl_data.ordered < total_num and highest_sl_color then
|
|
self:Fire(GuildModel.REQUEST_CCMD_EVENT, 40036, 0, highest_sl)
|
|
return false
|
|
else
|
|
self.guild_cur_sl_order_data = lastest_sl
|
|
self.guild_cur_sl_orderId = lastest_sl.order
|
|
return true
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
function GuildModel:GetGuildSpellListData( )
|
|
return self.guild_sl_data
|
|
end
|
|
|
|
-- 更新选中了的拼单列表信息 40036
|
|
function GuildModel:UpdateGuildSpellListDataStatus(vo)
|
|
if not vo then return end
|
|
|
|
self.guild_cur_sl_order_data = nil
|
|
self.guild_cur_sl_orderId = vo.order
|
|
|
|
if self.guild_sl_data and self.guild_sl_data.guild_orders then
|
|
-- state 订单状态0初始1选中(可拼单)2已出待完成3已完成可感谢4完全完成
|
|
for k, v in ipairs(self.guild_sl_data.guild_orders) do
|
|
if v.order == vo.order then
|
|
self.guild_cur_sl_order_data = v
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function GuildModel:GetCurSelectedSpellListId( )
|
|
return self.guild_cur_sl_orderId
|
|
end
|
|
-- 获取当前已经选中的拼单数据
|
|
function GuildModel:GetCurSelectedSpellListData( )
|
|
return self.guild_cur_sl_order_data
|
|
end
|
|
|
|
-- 完成拼单更新数据 40040
|
|
function GuildModel:UpdateGuildSpellListFinish(vo)
|
|
if not vo then return end
|
|
if self.guild_sl_data and self.guild_sl_data.guild_orders then
|
|
-- state 订单状态0初始1选中(可拼单)2已出待完成3已完成可感谢4完全完成
|
|
for k, v in ipairs(self.guild_sl_data.guild_orders) do
|
|
if v.order == vo.order then
|
|
v.state = 3
|
|
if self.guild_cur_sl_orderId == vo.order then
|
|
self.guild_cur_sl_order_data = v
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 更新单个拼单数据
|
|
function GuildModel:UpdateGuildSpellListData(vo)
|
|
if not vo then return end
|
|
if self.guild_sl_data and self.guild_sl_data.guild_orders then
|
|
-- state 订单状态0初始1选中(可拼单)2已出待完成3已完成可感谢4完全完成
|
|
for k, v in ipairs(self.guild_sl_data.guild_orders) do
|
|
if v.order == vo.order then
|
|
v.state = vo.state
|
|
v.process = vo.process
|
|
v.limit = vo.limit
|
|
v.teams = vo.teams
|
|
local need_refresh = true
|
|
if v.state == 4 then
|
|
need_refresh = self:ChooseOrReqGreastestOrder()
|
|
end
|
|
if need_refresh and v.order == self.guild_cur_sl_orderId then
|
|
self.guild_cur_sl_order_data = v
|
|
self:Fire(GuildModel.UPDATE_SELECTED_GUILD_SL_DATA)
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 社团拼单邀请社团成员后,记录邀请时间做cd表现
|
|
function GuildModel:SetGuildSLInviteMemTime(role_id)
|
|
if role_id then
|
|
self.guild_sl_invite_time[role_id] = TimeUtil:getServerTime()
|
|
end
|
|
end
|
|
function GuildModel:GetGuildSLInviteMemTime(role_id)
|
|
return self.guild_sl_invite_time[role_id] or 0
|
|
end
|
|
-- 社团拼单是否邀请了假人
|
|
function GuildModel:GetGuildSLInvitedFakeRole( )
|
|
local bool = false
|
|
if self.guild_cur_sl_order_data then
|
|
for k, v in pairs(self.guild_cur_sl_order_data.teams) do
|
|
if v.role_id < 10 then
|
|
bool = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return bool
|
|
end
|
|
-- 判断当前成员是否已经接受了邀请
|
|
function GuildModel:GetGuildSLMemInvited(role_id)
|
|
local bool = false
|
|
if self.guild_cur_sl_order_data and role_id then
|
|
for k, v in pairs(self.guild_cur_sl_order_data.teams) do
|
|
if v.role_id == role_id then
|
|
bool = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return bool
|
|
end
|
|
-- 判断当前的拼单数据是否可以打开感谢界面
|
|
function GuildModel:OpenGuildSLThankView(order)
|
|
if self.guild_sl_data and self.guild_sl_data.guild_orders then
|
|
-- state 订单状态0初始1选中(可拼单)2已出待完成3已完成可感谢4完全完成
|
|
for k, v in ipairs(self.guild_sl_data.guild_orders) do
|
|
if v.order == order and v.state == 3 then
|
|
-- 构造打开感谢界面的数据
|
|
local vo = {
|
|
support_cfg_id = v.cfg,
|
|
order = v.order,
|
|
role_list = v.teams
|
|
}
|
|
self:Fire(GuildModel.OPEN_GUILD_SL_THANK_VIEW, true, vo)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 社团资金 40043
|
|
function GuildModel:UpdateGuildFunds(vo)
|
|
self.base_info = self.base_info or {}
|
|
self.base_info.guild_funds = vo.value
|
|
self.guild_funds = vo.value
|
|
end
|
|
function GuildModel:SetGuildFunds(funds)
|
|
self.guild_funds = funds
|
|
end
|
|
function GuildModel:GetGuildFunds()
|
|
return self.guild_funds
|
|
end
|
|
|
|
-- 更新玩家个人的社团活跃信息 40400
|
|
function GuildModel:SetPersonalGuildActive( vo )
|
|
self.personal_active = vo.labors
|
|
self.personal_stage = vo.stage
|
|
self.active_task = vo.labor_tasks
|
|
end
|
|
-- 获取社团个人活跃值和奖励阶段
|
|
function GuildModel:GetPersonalActiveInfo( )
|
|
return self.personal_active, self.personal_stage
|
|
end
|
|
function GuildModel:GetGuildActiveTaskData(id)
|
|
if id then
|
|
for k, v in pairs(self.active_task) do
|
|
if v.id == id then
|
|
return v
|
|
end
|
|
end
|
|
return nil
|
|
else
|
|
return self.active_task
|
|
end
|
|
end
|
|
|
|
-- 缓存社团驻地内玩家人数 40063
|
|
function GuildModel:SetGuildSceneMemberNum(num)
|
|
self.guild_scene_mem_num = num
|
|
self.guild_party_radio = 0
|
|
|
|
-- 获取人数挂机效率
|
|
for k, v in pairs(Config.Guildtriberadio) do
|
|
if v.num_min <= num and v.num_max >= num then
|
|
self.guild_party_radio = v.radio
|
|
end
|
|
end
|
|
end
|
|
function GuildModel:GetGuildSceneMemberNum( )
|
|
return self.guild_scene_mem_num, self.guild_party_radio
|
|
end
|
|
|
|
-- 更新社团活跃任务 40401
|
|
function GuildModel:UpdateActiveTask( vo )
|
|
for k, v in pairs(self.active_task) do
|
|
if v.id == vo.id and v.type == vo.type then
|
|
v.progress = vo.progress
|
|
v.state = vo.state
|
|
return
|
|
end
|
|
end
|
|
-- 若不能更新到任务,则在这边加入任务进度
|
|
local tb = {
|
|
id = vo.id,
|
|
type = vo.type,
|
|
progress = vo.progress,
|
|
state = vo.state,
|
|
}
|
|
table.insert(self.active_task, tb)
|
|
end
|
|
|
|
-- 更新社团总活跃度相关信息 40402
|
|
function GuildModel:SetGuildActiveData( vo )
|
|
self.guild_active = vo.labors
|
|
self.guild_active_stage = vo.stage
|
|
self.guild_week_stime = vo.stime
|
|
end
|
|
function GuildModel:GetGuildActiveData( )
|
|
return self.guild_active, self.guild_active_stage, self.guild_week_stime
|
|
end
|
|
|
|
-- 更新活跃奖励领取阶段 40403
|
|
function GuildModel:UpdateActiveStage( vo )
|
|
if vo.opty == 0 then -- 个人活跃奖励领取
|
|
self.personal_stage = vo.stage
|
|
elseif vo.opty == 1 then -- 社团阶段奖励领取
|
|
self.guild_active_stage = vo.stage
|
|
end
|
|
end
|
|
function GuildModel:GetAutoApproveData( )
|
|
return self.approve_type, self.auto_approve_lv, self.auto_approve_power
|
|
end
|
|
|
|
-- 服务端广播社团活跃值
|
|
function GuildModel:UpdateGuildActive(active)
|
|
self.guild_active = active
|
|
end
|
|
|
|
-- 设置社团日志信息 40404
|
|
function GuildModel:SetGuildLogInfo( vo )
|
|
vo = self:SortGuildLog(vo)
|
|
self.guild_log_list = vo
|
|
end
|
|
function GuildModel:SortGuildLog( list )
|
|
local sort_func = function ( a, b )
|
|
return a.time > b.time
|
|
end
|
|
table.sort(list, sort_func)
|
|
return list
|
|
end
|
|
function GuildModel:GetGuildLogInfo( )
|
|
return self.guild_log_list
|
|
end
|
|
|
|
-- 更新社团日志内容 40405
|
|
function GuildModel:UpdateGuildLogInfo( vo )
|
|
self.guild_log_list[#self.guild_log_list+1] = {
|
|
type = vo.type,
|
|
name = vo.name,
|
|
value = vo.value,
|
|
time = vo.time,
|
|
}
|
|
self.guild_log_list = self:SortGuildLog(self.guild_log_list)
|
|
end
|
|
|
|
-- 更新玩家个人活跃
|
|
function GuildModel:UpdateGuildActivePersonalActive(active)
|
|
self.personal_active = active
|
|
end
|
|
|
|
-- 社团活动玩法相关的数据添加(驻地内玩法)
|
|
-- 活动的类型需要在GuildEventType中注册
|
|
function GuildModel:SetGuildEventByType(type, vo)
|
|
if not type or not vo then return end
|
|
-- 使用同一个参数来标识活动的开启情况
|
|
vo.is_evt_open = false
|
|
if type == GuildEventType.GuildBossNoon then -- 社团午间boss
|
|
vo.is_evt_open = vo.state == 1
|
|
self.guild_event_tab_red["406@1"] = vo.is_evt_open
|
|
-- 主界面右上角入口按钮
|
|
if vo.is_evt_open then
|
|
local end_time = vo.stime + self:GetGuildEventStayTime(406, 1)
|
|
local left_time = end_time - TimeUtil:getServerTime()
|
|
ActivityIconManager:getInstance():addIcon(40601, left_time)
|
|
if not self.guild_event_act_tip_cache[type] then
|
|
if not SceneManager:getInstance():IsGuildScene() then
|
|
GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP,406,1,true)
|
|
end
|
|
self.guild_event_act_tip_cache[type] = true
|
|
end
|
|
else
|
|
ActivityIconManager:getInstance():deleteIcon(40601)
|
|
GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 406, 1)
|
|
-- 活动结束后清除roll点数据
|
|
self:ClearGuildBossRollData(30)
|
|
end
|
|
elseif type == GuildEventType.GuildBossNight then -- 社团晚间boss
|
|
vo.is_evt_open = vo.state == 1
|
|
self.guild_event_tab_red["406@2"] = vo.is_evt_open
|
|
-- 主界面右上角入口按钮
|
|
if vo.is_evt_open then
|
|
local end_time = vo.stime + self:GetGuildEventStayTime(406, 1, 2)
|
|
local left_time = end_time - TimeUtil:getServerTime()
|
|
ActivityIconManager:getInstance():addIcon(40602, left_time)
|
|
if not self.guild_event_act_tip_cache[type] then
|
|
if not SceneManager:getInstance():IsGuildScene() then
|
|
GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP,406,2,true)
|
|
end
|
|
self.guild_event_act_tip_cache[type] = true
|
|
end
|
|
else
|
|
ActivityIconManager:getInstance():deleteIcon(40602)
|
|
GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 406, 2)
|
|
-- 活动结束后清除roll点数据
|
|
self:ClearGuildBossRollData(30)
|
|
end
|
|
elseif type == GuildEventType.NoonCollect then -- 社团午间采集
|
|
vo.is_active = vo.state == 1
|
|
vo.is_evt_open = vo.state == 1
|
|
|
|
self.guild_evt_data[type] = vo--封印裂隙要先保存下数据,不然会导致邀请函开启控制失效
|
|
|
|
self.guild_event_tab_red["408@0"] = vo.is_evt_open
|
|
self.guild_event_tab_red["408@"..vo.type] = vo.is_evt_open
|
|
--展示主界面右上角活动通知图标
|
|
if vo.state == 1 then
|
|
local curTime = TimeUtil:getServerTime()
|
|
local status_time = vo.end_time - curTime
|
|
ActivityIconManager:getInstance():addIcon(40800, status_time)
|
|
--封印裂隙不再主动弹邀请函
|
|
-- if not self.guild_event_act_tip_cache[type] then
|
|
-- if not SceneManager:getInstance():IsGuildScene() then
|
|
-- if not self:GuildCollectAutoFightIgnoreCollectMon() then
|
|
-- GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP, 408,nil,true)
|
|
-- end
|
|
-- end
|
|
-- self.guild_event_act_tip_cache[type] = true
|
|
-- end
|
|
else
|
|
self.guild_event_act_tip_cache[type] = false
|
|
CommonModel:getInstance():ReSetActClockMaskList(408)
|
|
ActivityIconManager:getInstance():deleteIcon(40800)
|
|
GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 408)
|
|
|
|
self:ResetSelfGuildCollectSupportId()
|
|
end
|
|
elseif type == GuildEventType.GuildParty then -- 社团派对
|
|
-- 需要额外判断活动是否已经开放
|
|
local is_module_open = GetModuleIsOpen(400, 7)
|
|
vo.is_evt_open = vo.stime ~= 0 and is_module_open
|
|
self.guild_event_tab_red["400@7"] = vo.is_evt_open
|
|
-- 主界面右上角入口按钮
|
|
if vo.is_evt_open then
|
|
local left_time = vo.etime - TimeUtil:getServerTime()
|
|
ActivityIconManager:getInstance():addIcon(4007, left_time)
|
|
if not self.guild_event_act_tip_cache[type] then
|
|
if not SceneManager:getInstance():IsGuildScene() then
|
|
GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP,400,7,true)
|
|
end
|
|
self.guild_event_act_tip_cache[type] = true
|
|
end
|
|
else
|
|
ActivityIconManager:getInstance():deleteIcon(4007)
|
|
GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 400, 7)
|
|
end
|
|
elseif type == GuildEventType.GuildWar then -- 本服团战
|
|
local cur_time = TimeUtil:getServerTime()
|
|
vo.is_evt_open = vo.etime ~= 0 and vo.state == 1 and cur_time < vo.etime
|
|
self.guild_event_tab_red["405@1"] = vo.is_evt_open
|
|
if vo.is_evt_open then
|
|
local left_time = vo.etime - cur_time
|
|
ActivityIconManager:getInstance():addIcon(40501, left_time)
|
|
self:SetWarActiveRedDot(405, 1, true)
|
|
if not self.guild_event_act_tip_cache[type] then
|
|
GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP,405,nil,true)
|
|
self.guild_event_act_tip_cache[type] = true
|
|
end
|
|
else
|
|
self:SetWarActiveRedDot(405, 1, false)
|
|
ActivityIconManager:getInstance():deleteIcon(40501)
|
|
GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 405)
|
|
end
|
|
elseif type == GuildEventType.GuildCSGR then -- 本国团战
|
|
vo.is_evt_open = vo.status ~= 0
|
|
if vo.is_evt_open then
|
|
ActivityIconManager:getInstance():addIcon(41000 + vo.ac_sub, vo.end_time - TimeUtil:getServerTime())
|
|
self:SetWarActiveRedDot(410, 1, true)
|
|
if not self.guild_event_act_tip_cache[type] then
|
|
GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP, 410, vo.ac_sub, true)
|
|
self.guild_event_act_tip_cache[type] = true
|
|
end
|
|
else
|
|
self:SetWarActiveRedDot(410, 1, false)
|
|
ActivityIconManager:getInstance():deleteIcon(41000 + vo.ac_sub)
|
|
GlobalEventSystem:Fire(EventName.CLOSE_ACITVITY_TIP, 410, vo.ac_sub)
|
|
end
|
|
if vo.status == 3 then -- 打开boss假血条表现
|
|
self:StartCSGRBossHpTimer()
|
|
end
|
|
end
|
|
self.guild_evt_data[type] = vo
|
|
end
|
|
|
|
function GuildModel:GetGuildEventByType(type)
|
|
return type and self.guild_evt_data[type]
|
|
end
|
|
|
|
function GuildModel:CheckGuildAuctionShow(vo)
|
|
self.guild_auction_hide = true
|
|
if vo.etime then
|
|
local cfg = self:LoadGuildAuctionCfg()
|
|
if cfg and cfg.e_time == vo.etime then
|
|
return
|
|
end
|
|
local time = TimeUtil:getServerTime()
|
|
if vo.etime > time and vo.etime <= time + 1800 +5 then
|
|
self.guild_auction_hide = false
|
|
self.guild_auction_time = vo.etime
|
|
end
|
|
end
|
|
end
|
|
|
|
function GuildModel:IsGuildAuctionShow()
|
|
return not self.guild_auction_hide
|
|
end
|
|
|
|
function GuildModel:SetGuildAuctionHide()
|
|
self.guild_auction_hide = true
|
|
self.guild_auction_cfg =
|
|
{
|
|
e_time = self.guild_auction_time,
|
|
}
|
|
self:SaveGuildAuctionCfg()
|
|
end
|
|
|
|
--保存社团拍卖提示
|
|
function GuildModel:SaveGuildAuctionCfg()
|
|
if self.guild_auction_cfg then
|
|
CookieWrapper.Instance:SaveCookie(CookieLevelType.Account, CookieTimeType.TYPE_ALWAYS, CookieKey.GUILD_SCENE_AUCION, self.guild_auction_cfg)
|
|
CookieWrapper.Instance:WriteAll()
|
|
end
|
|
end
|
|
|
|
--加载社团拍卖提示
|
|
function GuildModel:LoadGuildAuctionCfg()
|
|
self.guild_auction_cfg = CookieWrapper.Instance:GetCookie(CookieLevelType.Account, CookieKey.GUILD_SCENE_AUCION)
|
|
return self.guild_auction_cfg
|
|
end
|
|
|
|
--判断活动是否开启
|
|
function GuildModel:IsGuildEventActive(event_type)
|
|
return event_type and self.guild_evt_data[event_type] and self.guild_evt_data[event_type].is_evt_open or false
|
|
end
|
|
|
|
function GuildModel:GetGuildEventData()
|
|
return self.guild_evt_data
|
|
end
|
|
|
|
----------封印裂隙玩法---start
|
|
--传入开始时间的时,获取第几场
|
|
function GuildModel:GetActivityRound(s_h,s_m)
|
|
local act_list = Config.Ac["408@0@1"]
|
|
local time_list = stringtotable(act_list.time_region)
|
|
local max_length = #time_list
|
|
for i,v in ipairs(time_list) do--遍历场次
|
|
if tonumber(s_h) == tonumber(v[1][1]) and tonumber(s_m) == tonumber(v[1][2]) then
|
|
return i
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
--根据怪物id获取采集活动的协助奖励配置
|
|
function GuildModel:GetGuildCollectMonRewardCfgById(mon_id)
|
|
local cfg = config.Guildcollectmonrewards
|
|
return cfg[mon_id] or nil
|
|
end
|
|
|
|
--社团采集活动状态 40801(主推是04协议,01协议这里只用来请求结束时间)
|
|
function GuildModel:SetGuildCollectActivityState(vo)
|
|
self.is_collect_active = vo.state == 1 and true or false --午间采集当前是否开着
|
|
self.collect_end_time = vo.end_time --当前午间采集活动的结束时间戳
|
|
if vo.state == 1 then--活动开始时开始进行倒计时
|
|
self:SetCollectLeftTime(self.collect_end_time)
|
|
end
|
|
end
|
|
|
|
--社团采集活动状态 40804 (后端主推通知活动开始和结束)
|
|
function GuildModel:SetGuildCollectActivityState2(vo)
|
|
self.is_collect_active = vo.state == 1 and true or false --午间采集当前是否开着
|
|
end
|
|
|
|
--社团采集活动参与信息 40802
|
|
function GuildModel:SetGuildCollectActivityInfo(vo)
|
|
self.day_total_collect_times = vo.count--今日已采集总次数
|
|
end
|
|
|
|
--采集场景右上角信息 40803
|
|
function GuildModel:SetGuildCollectActivityDetailInfo(vo)
|
|
self.now_collect_seal_times = vo.count1 --本次封印活动采集次数
|
|
self.day_total_collect_times = vo.total_count--今日已采集总次数
|
|
end
|
|
|
|
--午间采集活动是否开启中
|
|
function GuildModel:IsGuildCollectActive( )
|
|
return self.is_collect_active
|
|
end
|
|
|
|
--获取当前采集的结束时间戳
|
|
function GuildModel:GetNowCollectEndTime( )
|
|
return self.collect_end_time
|
|
end
|
|
|
|
--获取本次封印活动的采集次数
|
|
function GuildModel:GetNowCollectSealTimes( )
|
|
return self.now_collect_seal_times
|
|
end
|
|
|
|
--获取封印活动今日已采集的总次数
|
|
function GuildModel:GetDayTotalCollectTimes( )
|
|
return self.day_total_collect_times
|
|
end
|
|
|
|
--午间采集活动倒计时
|
|
function GuildModel:SetCollectLeftTime(end_time)
|
|
self:StopGuildCollectTimer()
|
|
local function checkLeftTime()
|
|
self.collect_left_time = end_time - TimeUtil:getServerTime()
|
|
self:Fire(GuildModel.UPDATE_GUILD_COLLECT_LEFT_TIME, self.collect_left_time)
|
|
end
|
|
checkLeftTime()
|
|
|
|
local function onTimer()
|
|
checkLeftTime()
|
|
if self.collect_left_time <= 0 then
|
|
self:StopGuildCollectTimer()
|
|
end
|
|
end
|
|
if self.collect_left_time_id == nil then
|
|
if self.collect_left_time > 0 then
|
|
self.collect_left_time_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 0.5, -1)
|
|
end
|
|
end
|
|
end
|
|
|
|
function GuildModel:StopGuildCollectTimer( )
|
|
self.collect_left_time = 0
|
|
if self.collect_left_time_id then
|
|
GlobalTimerQuest:CancelQuest(self.collect_left_time_id)
|
|
self.collect_left_time_id = nil
|
|
end
|
|
end
|
|
|
|
--是否能继续采集 当次次数封印次数已满或者活动次数已满不给采集
|
|
function GuildModel:CanCollect()
|
|
--单场次数
|
|
local MaxCollectSealTimes = self:GetGuildCollectKvByKey("collet_time").value
|
|
local bool_seal = self:GetNowCollectSealTimes() < MaxCollectSealTimes
|
|
--一天最多次数
|
|
local MaxDayCollectSealTimes = self:GetGuildCollectKvByKey("join_time_day").value
|
|
local bool_day = self:GetDayTotalCollectTimes() < MaxDayCollectSealTimes
|
|
|
|
local bool_activity = false
|
|
local nc_data = self:GetGuildEventByType(GuildEventType.NoonCollect)
|
|
if nc_data then
|
|
bool_activity = nc_data.is_evt_open
|
|
end
|
|
|
|
return bool_seal and bool_activity and bool_day
|
|
end
|
|
|
|
--判断不能采集的原因 1|本次次数满 2|今日次数满
|
|
function GuildModel:GetCanNotCollectReason( )
|
|
local MaxCollectSealTimes = self:GetGuildCollectKvByKey("collet_time").value
|
|
local bool_seal = self:GetNowCollectSealTimes() < MaxCollectSealTimes
|
|
|
|
local MaxDayCollectSealTimes = self:GetGuildCollectKvByKey("join_time_day").value
|
|
local bool_day = self:GetDayTotalCollectTimes() < MaxDayCollectSealTimes
|
|
|
|
--优先今日总次数
|
|
if not bool_day then
|
|
return 2
|
|
else
|
|
if not bool_seal then
|
|
return 1
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
--封印裂隙活动中时次数满是否忽略采集怪
|
|
function GuildModel:GuildCollectAutoFightIgnoreCollectMon( )
|
|
local bool_activity = false
|
|
local nc_data = self:GetGuildEventByType(GuildEventType.NoonCollect)
|
|
if nc_data then
|
|
bool_activity = nc_data.is_evt_open
|
|
end
|
|
if not bool_activity then --如果不在活动中,返回false,避免影响其他情况
|
|
return false
|
|
else--在活动中且次数满返回true
|
|
--单场活动最多10次
|
|
local MaxCollectSealTimes = self:GetGuildCollectKvByKey("collet_time").value
|
|
local bool_seal = self:GetNowCollectSealTimes() < MaxCollectSealTimes
|
|
--一天最多30次
|
|
local MaxDayCollectSealTimes = self:GetGuildCollectKvByKey("join_time_day").value
|
|
local bool_day = self:GetDayTotalCollectTimes() < MaxDayCollectSealTimes
|
|
if not bool_seal or not bool_day then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 1)保留“自动封印”按钮,该按钮仅控制是否采集
|
|
-- 2)自动挂机需要根据当前状态判断挂机行为
|
|
-- 1.无封印次数时,点击挂机仅打怪
|
|
-- 2.有封印次数时,且未选中怪物,未进入协助状态时,仅采集
|
|
-- 3.有封印次数时,选中怪物,则攻击该怪物,击杀后变为无目标状态,继续采集
|
|
-- 4.有封印次数时,点击协助,攻击协助对象怪物,击杀后变为无目标状态,继续采集
|
|
--新的封印裂隙自动采集逻辑
|
|
|
|
|
|
--剩余的采集怪数量
|
|
function GuildModel:SetGuildCollectLeftMon(vo)
|
|
self.now_left_collect_mon_count = vo.count
|
|
end
|
|
|
|
--获取剩余的采集怪数量
|
|
function GuildModel:GetGuildCollectLeftMon( )
|
|
return self.now_left_collect_mon_count
|
|
end
|
|
|
|
--封印裂隙协助者助战信息
|
|
function GuildModel:SetGuildCollectHelperInfo(data,remove_id)
|
|
if remove_id then
|
|
self.guild_collect_helper_info[remove_id] = nil
|
|
return
|
|
end
|
|
if not data then return end
|
|
self.guild_collect_helper_info[data.role_id] = data
|
|
end
|
|
|
|
--获取封印裂隙协助者助战信息
|
|
function GuildModel:GetCollectHelperInfo( )
|
|
return self.guild_collect_helper_info
|
|
end
|
|
|
|
--设置自动采集状态
|
|
function GuildModel:SetAutoGuildCollectState(bool)
|
|
self.auto_guild_collect_state = bool and 1 or 0
|
|
if not bool then
|
|
--取消自动采集时清空当前的选中对象
|
|
-- GlobalEventSystem:Fire(EventName.CANCEL_TO_COLLECT)
|
|
-- Scene.Instance:CancelClickTarget(nil,true) --把目标清掉
|
|
else
|
|
--切换到自动采集状态时,立刻过去寻路找采集怪
|
|
self:Fire(GuildModel.AUTO_FIND_WAY_TO_GUILD_COLLECT_MON)
|
|
end
|
|
end
|
|
|
|
--获取自动采集状态
|
|
function GuildModel:GetAutoGuildCollectState( )
|
|
return self.auto_guild_collect_state
|
|
end
|
|
|
|
--是否为自动采集状态
|
|
function GuildModel:IsAutoGuildCollectState()
|
|
return self.auto_guild_collect_state == 1
|
|
end
|
|
|
|
--保存当前的封印裂隙协助唯一id
|
|
function GuildModel:SetSelfGuildCollectSupportId(id)
|
|
self.now_guild_collect_support_id = id
|
|
end
|
|
|
|
function GuildModel:ResetSelfGuildCollectSupportId( )
|
|
self.now_guild_collect_support_id = 0
|
|
end
|
|
|
|
function GuildModel:GetSelfGuildCollectSupportId( )
|
|
return self.now_guild_collect_support_id
|
|
end
|
|
|
|
----------封印裂隙玩法---end
|
|
|
|
-- 社团boss相关
|
|
-- 获取社团boss血量数据
|
|
function GuildModel:GetGuildBossHp( )
|
|
return self.guild_boss_hp_data
|
|
end
|
|
|
|
-- 更新晚间boss伤害排行数据 40602 40603
|
|
function GuildModel:SetGuildBossRank(boss_type, rank_type, vo)
|
|
if not boss_type or not rank_type then return end
|
|
self:RankSortFunc(vo.hurt_list, "rank")
|
|
self.guild_boss_rank[boss_type] = self.guild_boss_rank[boss_type] or {}
|
|
--过滤掉列表中伤害为0的
|
|
self.guild_boss_rank[boss_type][rank_type] = {}
|
|
for i,v in ipairs(vo.hurt_list) do
|
|
if v.hurt ~= 0 then
|
|
table.insert(self.guild_boss_rank[boss_type][rank_type],v)
|
|
end
|
|
end
|
|
end
|
|
function GuildModel:GetGuildBossRank(boss_type, rank_type)
|
|
return self.guild_boss_rank[boss_type] and self.guild_boss_rank[boss_type][rank_type] or {}
|
|
end
|
|
|
|
-- 伤害排行排序
|
|
function GuildModel:RankSortFunc(list, val)
|
|
if not val then return end
|
|
local sort_func = function ( a, b )
|
|
return a[val] < b[val]
|
|
end
|
|
table.sort(list, sort_func)
|
|
end
|
|
|
|
-- 更新晚间boss个人排行信息 40604
|
|
function GuildModel:SetGuildBossPersonalRank(boss_type, vo)
|
|
self.guild_boss_personal_rank[boss_type] = self.guild_boss_personal_rank[boss_type] or {}
|
|
self.guild_boss_personal_rank[boss_type][vo.opty] = vo
|
|
end
|
|
function GuildModel:GetGuildBossPersonalRank(boss_type, type)
|
|
return self.guild_boss_personal_rank[boss_type] and self.guild_boss_personal_rank[boss_type][type] or nil
|
|
end
|
|
|
|
-- 对晚间boss活动的结算奖励和排行做排序
|
|
function GuildModel:SortGuildBossResult(vo)
|
|
-- 道具排序规则是品质降序,id升序
|
|
local good_basic
|
|
for k, v in pairs(vo.role_awards) do
|
|
good_basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(v.goodsid)
|
|
v.color = good_basic.color
|
|
end
|
|
for k, v in pairs(vo.guild_awards) do
|
|
good_basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(v.goodsid)
|
|
v.color = good_basic.color
|
|
end
|
|
local sort_goods = function ( a, b )
|
|
if a.color == b.color then
|
|
return a.goodsid < b.goodsid
|
|
else
|
|
return a.color > b.color
|
|
end
|
|
end
|
|
if vo.role_awards and TableSize(vo.role_awards) > 1 then
|
|
table.sort(vo.role_awards, sort_goods)
|
|
end
|
|
if vo.guild_awards and TableSize(vo.guild_awards) > 1 then
|
|
table.sort(vo.guild_awards, sort_goods)
|
|
end
|
|
end
|
|
|
|
function GuildModel:SetGuildBossInvincible(vo)
|
|
self.guild_boss_invincible = vo
|
|
end
|
|
function GuildModel:GetGuildBossInvincible( )
|
|
return self.guild_boss_invincible
|
|
end
|
|
|
|
-- 获得boss坐标
|
|
function GuildModel:GetGuildBossPos( )
|
|
local pos_data = stringtotable(Config.Guildbosskv["mon_pos"].value)
|
|
return pos_data[1],pos_data[2]
|
|
end
|
|
-- 设置boss血量(伪,并非真血量,而是用于显示血条的模拟)
|
|
function GuildModel:SetGuildBossHpSimulation(hp)
|
|
self.guild_boss_hp_sim = hp
|
|
self:ChangeVar("guild_boss_hp_sim", hp,false,true)
|
|
end
|
|
function GuildModel:GetGuildBossHpSimulation( )
|
|
return self.guild_boss_hp_sim
|
|
end
|
|
|
|
--社团boss鼓舞数据 40607
|
|
function GuildModel:SetGuildBossEncourageData(vo)
|
|
self:ChangeVar("encourage_free_times", vo.free_times, false, true)
|
|
self:ChangeVar("encourage_cost_times", vo.cost_times, false, true)
|
|
self:ChangeVar("encourage_guild_times", vo.guild_times, false, true)
|
|
end
|
|
|
|
--广播更新社团鼓舞次数 40609
|
|
function GuildModel:UpdateGuildBossEncourageGuildTimes(vo)
|
|
self:ChangeVar("encourage_guild_times", vo.guild_times, false, true)
|
|
end
|
|
|
|
-- 设置当前社团采集的道具id
|
|
function GuildModel:SetCurGuildBossCollectDropId(drop_id)
|
|
self.gboss_col_drop_id = drop_id
|
|
end
|
|
|
|
function GuildModel:GetCurGuildBossCollectDropId( )
|
|
return self.gboss_col_drop_id
|
|
end
|
|
|
|
--获取剩余的免费鼓舞次数
|
|
function GuildModel:GetLeftFreeEncourageTimes( )
|
|
return self.encourage_free_times
|
|
end
|
|
|
|
--获取剩余的付费鼓舞次数
|
|
function GuildModel:GetleftCostEncourageTimes( )
|
|
return self.encourage_cost_times
|
|
end
|
|
|
|
--获取社团鼓舞加成次数
|
|
function GuildModel:GetEncourageGuildTimes( )
|
|
return self.encourage_guild_times
|
|
end
|
|
|
|
function GuildModel:CacheGuildIgnoreCollectId(instance_id)
|
|
self.guild_collect_ignore_list[instance_id] = true
|
|
end
|
|
function GuildModel:ClearGuildIgnoreCollectId(instance_id)
|
|
if self.guild_collect_ignore_list[instance_id] then
|
|
self.guild_collect_ignore_list[instance_id] = nil
|
|
end
|
|
end
|
|
function GuildModel:IsGuildIgnoreCollection(instance_id)
|
|
return self.guild_collect_ignore_list[instance_id]
|
|
end
|
|
function GuildModel:ClearGuildIgnoreCollection( )
|
|
self.guild_collect_ignore_list = {}
|
|
end
|
|
-- 社团boss roll点数据缓存 每一轮roll点重置并刷新 40613
|
|
function GuildModel:SetGuildBossRollData(vo)
|
|
self:ClearGuildBossRollData()
|
|
self.guild_boss_roll_start_time = vo.start_time
|
|
self.guild_boss_roll_data_raw = vo.roll_list
|
|
for k, v in ipairs(vo.roll_list) do
|
|
self.guild_boss_roll_data[v.order_id] = v
|
|
end
|
|
end
|
|
function GuildModel:GetGuildBossRollStartTime( )
|
|
return self.guild_boss_roll_start_time
|
|
end
|
|
function GuildModel:GetGuildBossRollData( )
|
|
return self.guild_boss_roll_data_raw
|
|
end
|
|
-- 根据id获取roll点数据
|
|
function GuildModel:GetGuildBossRollDataByOrderId(order_id)
|
|
if not order_id then return end
|
|
return self.guild_boss_roll_data[order_id] or nil
|
|
end
|
|
-- 清除社团bossroll点缓存数据 delay_sec 是否延迟
|
|
function GuildModel:ClearGuildBossRollData(delay_sec)
|
|
if self.delay_clear_gboss_roll_data_id then
|
|
GlobalTimerQuest:CancelQuest(self.delay_clear_gboss_roll_data_id)
|
|
self.delay_clear_gboss_roll_data_id = nil
|
|
end
|
|
if delay_sec then
|
|
local function delay_method( )
|
|
self:ClearGuildBossRollData()
|
|
end
|
|
self.delay_clear_gboss_roll_data_id = setTimeout(delay_method, delay_sec)
|
|
else
|
|
self.guild_boss_roll_data_raw = {}
|
|
self.guild_boss_roll_data = {}
|
|
self.guild_boss_role_highest_roleId = {}
|
|
self.guild_boss_roll_record = {}
|
|
self:SetGuildBossRollIsFinished(false)
|
|
end
|
|
end
|
|
-- 根据roll点结果,更新缓存 40614
|
|
function GuildModel:UpdateGuildBossRollData(vo)
|
|
if vo then
|
|
for k, v in pairs(self.guild_boss_roll_data_raw) do
|
|
if v.order_id == vo.order_id then
|
|
v.roll_num = vo.roll_num
|
|
break
|
|
end
|
|
end
|
|
if self.guild_boss_roll_data[vo.order_id] then
|
|
self.guild_boss_roll_data[vo.order_id].roll_num = vo.roll_num
|
|
end
|
|
end
|
|
end
|
|
|
|
function GuildModel:SetGuildBossRollIsFinished(bool)
|
|
self.guild_boss_roll_finished = bool
|
|
end
|
|
function GuildModel:GetGuildBossRollIsFinished( )
|
|
return self.guild_boss_roll_finished
|
|
end
|
|
-- 获取社团boss的玩家roll点次数红点
|
|
function GuildModel:CheckGuildBossNumRed( )
|
|
self.g_boss_roll_red_num = 0
|
|
local cur_time = TimeUtil:getServerTime()
|
|
local roll_delay_time = self:GetGuildBossKV("roll_time") -- 几秒后结束roll点
|
|
if not self.guild_boss_roll_finished then -- 如果roll点阶段内,则判断有几个道具没有roll
|
|
for k, v in pairs(self.guild_boss_roll_data_raw) do
|
|
if (cur_time < (self.guild_boss_roll_start_time + roll_delay_time)) and v.roll_num == 0 then
|
|
self.g_boss_roll_red_num = self.g_boss_roll_red_num + 1
|
|
end
|
|
end
|
|
else -- 如果roll点阶段外,则判断是否需要提示获得了几件道具
|
|
if self._gboss_need_show_claim_red then
|
|
local role_id = RoleManager.Instance.mainRoleInfo.role_id
|
|
for k, v in pairs(self.guild_boss_role_highest_roleId) do
|
|
if v == role_id then
|
|
self.g_boss_roll_red_num = self.g_boss_roll_red_num + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return self.g_boss_roll_red_num
|
|
end
|
|
function GuildModel:GetGuildBossNumRed( )
|
|
return self.g_boss_roll_red_num
|
|
end
|
|
|
|
-- 查询roll点信息 40616
|
|
function GuildModel:SetGuildBossRollRecord(vo)
|
|
if vo then
|
|
self.guild_boss_roll_record[vo.order_id] = vo.role_list
|
|
end
|
|
if self.guild_boss_roll_finished then
|
|
self:GetGuildBossRollHighestRoleId(vo.order_id)
|
|
end
|
|
end
|
|
function GuildModel:GetGuildBossRollRecord(order_id)
|
|
if order_id then
|
|
return self.guild_boss_roll_record[order_id]
|
|
end
|
|
end
|
|
|
|
-- 当本轮roll点结束后,调用此方法,计算一次缓存中所有的记录的最高玩家id update_order_id 只更新目标id
|
|
function GuildModel:GetGuildBossRollHighestRoleId(update_order_id)
|
|
for order_id, record_list in pairs(self.guild_boss_roll_record) do
|
|
if not update_order_id or update_order_id == order_id then
|
|
local highest_roll_num, target_role_id = nil, 0
|
|
for k, record in pairs(record_list) do
|
|
if not highest_roll_num or highest_roll_num < record.roll_num then
|
|
highest_roll_num = record.roll_num
|
|
target_role_id = record.role_id
|
|
end
|
|
end
|
|
self.guild_boss_role_highest_roleId[order_id] = target_role_id
|
|
end
|
|
end
|
|
self:Fire(GuildModel.UPDATE_GUILD_BOSS_HIGHEST_DATA, update_order_id or nil)
|
|
end
|
|
-- 根据id获取本轮roll点点数最高的玩家id
|
|
function GuildModel:GetGuildBossRollHighestByOrderId(order_id)
|
|
if not order_id then return 0 end
|
|
return self.guild_boss_role_highest_roleId[order_id] or 0
|
|
end
|
|
|
|
-- 缓存数据,定时发送特殊社团聊天内容
|
|
-- function GuildModel:CacheGuildBossRollResult(vo, roll_num, max_roll)
|
|
-- if vo and roll_num and max_roll then
|
|
-- -- print("Saber:GuildModel [start:2057] ------------------------------------------")
|
|
-- table.insert(self.gboss_roll_result, {
|
|
-- goods_type_id = vo.goods_type_id,
|
|
-- num = vo.num,
|
|
-- roll_num = roll_num,
|
|
-- max_roll = max_roll,
|
|
-- })
|
|
-- self:LoadGuildBossRollResult()
|
|
-- end
|
|
-- end
|
|
-- -- 读取roll点缓存,发送玩家名义的roll点聊天内容
|
|
-- function GuildModel:LoadGuildBossRollResult( )
|
|
-- if not self.is_in_gboss_result_cd then
|
|
-- local vo = table.remove(self.gboss_roll_result, 1)
|
|
-- if vo then
|
|
-- -- print("Saber:GuildModel [start:2072] ------------------------------------------")
|
|
-- local goods_name = GoodsModel:getInstance():getGoodsName(vo.goods_type_id, true)
|
|
-- ChatModel:getInstance():Fire(
|
|
-- ChatModel.SEND_MSG, ChatModel.CHANNEL_GUILD,
|
|
-- string.format("我在<color=%s>[社团幻魔]</color>中对%s掷出了<color=%s>%s</color>点(当前最高<color=%s>%s</color>点)",
|
|
-- ColorUtil.BLUE_DARK, goods_name, ColorUtil.GREEN_DARK, vo.roll_num, ColorUtil.GREEN_DARK, vo.max_roll),
|
|
-- 0, "[{notcd, 1}]")
|
|
-- -- 毫秒计时 多延迟100毫秒
|
|
-- local cd_end_time = TimeUtil:getServerTimeMs() + 100
|
|
-- local function gboss_roll_result_cdtimer()
|
|
-- local cd_finished = cd_end_time < TimeUtil:getServerTimeMs()
|
|
-- if cd_finished then
|
|
-- -- print("Saber:GuildModel [start:2084] ------------------------------------------")
|
|
-- self:ClearGuildBossRollResultCDTimer()
|
|
-- self.is_in_gboss_result_cd = false
|
|
-- self:LoadGuildBossRollResult()
|
|
-- end
|
|
-- end
|
|
-- self.gboss_roll_result_cdtimer_id = GlobalTimerQuest:AddPeriodQuest(gboss_roll_result_cdtimer, 0.01, -1)
|
|
-- self.is_in_gboss_result_cd = true
|
|
-- end
|
|
-- end
|
|
-- end
|
|
-- function GuildModel:ClearGuildBossRollResultCDTimer( )
|
|
-- if self.gboss_roll_result_cdtimer_id then
|
|
-- GlobalTimerQuest:CancelQuest(self.gboss_roll_result_cdtimer_id)
|
|
-- self.gboss_roll_result_cdtimer_id = nil
|
|
-- end
|
|
-- end
|
|
-- 社团boss相关 end
|
|
|
|
-- 社团派对相关
|
|
-- 缓存社团派对经验和祝火状态 40058
|
|
function GuildModel:SetGuildPartyExpData(vo)
|
|
self.guild_party_exp = vo.exp
|
|
-- self.guild_party_pos = vo.pos
|
|
end
|
|
function GuildModel:GetGuildPartyExpData( )
|
|
return self.guild_party_exp
|
|
end
|
|
|
|
-- 更新社团派对的经验值 40059
|
|
function GuildModel:UpdateGuildPartyExp(vo)
|
|
self.guild_party_exp = self.guild_party_exp + vo.exp
|
|
self.guild_party_exp_eff = vo.exp * 12 -- 这个经验值是5秒给一次,这里计算一次每分钟的经验值
|
|
if self.guild_evt_data[GuildEventType.GuildParty] then
|
|
self.guild_evt_data[GuildEventType.GuildParty].ltime = vo.ltime
|
|
end
|
|
end
|
|
function GuildModel:GetGuildPartyExpEffPerMin( )
|
|
return self.guild_party_exp_eff
|
|
end
|
|
--设置社团协助信息前往协助列表 40046
|
|
function GuildModel:SetGuildSupportInfo( scmd )
|
|
self.guild_support_info = scmd.support_list
|
|
|
|
--判断当前唯一协助id是不是封印裂隙的
|
|
for k,v in pairs(self.guild_support_info) do
|
|
if scmd.self_support_sid == v.support_sid and v.support_cfg_id == 2 then
|
|
self:SetSelfGuildCollectSupportId(scmd.self_support_sid)
|
|
end
|
|
end
|
|
end
|
|
|
|
function GuildModel:GetGuildSupportInfo( )
|
|
return self.guild_support_info
|
|
end
|
|
|
|
--通过sid获取某一个协助
|
|
function GuildModel:GetGuildSupportInfoById( support_sid )
|
|
local list = self:GetGuildSupportInfo()
|
|
local info
|
|
if list and #list > 0 then
|
|
for i,v in ipairs(list) do
|
|
if v.support_sid == support_sid then
|
|
info = v
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return info
|
|
end
|
|
|
|
--解析协助状态信息
|
|
function GuildModel:ParseGuildSupportData(str)
|
|
local bosspower = 0
|
|
local end_time = 0
|
|
local boss_id = 0
|
|
local dun_id = 0
|
|
local status = 0
|
|
if str and str ~= "" then
|
|
local info = stringtotable(str)
|
|
if info and #info > 0 then
|
|
for i,v in ipairs(info) do
|
|
local key = tonumber(v[1])
|
|
if key == 1 then
|
|
bosspower = tonumber(v[2])
|
|
elseif key == 2 then
|
|
end_time = tonumber(v[2])
|
|
elseif key == 3 then
|
|
boss_id = tonumber(v[2])
|
|
elseif key == 4 then
|
|
dun_id = tonumber(v[2])
|
|
elseif key == 5 then
|
|
status = tonumber(v[2])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return bosspower, end_time, boss_id, dun_id, status
|
|
end
|
|
|
|
|
|
--社团协助列表增删(封印裂隙40811)
|
|
function GuildModel:UpdateGuildSupportInfo(vo)
|
|
-- print("==WQ==:UpdateGuildSupportInfo [start:2039] self.guild_support_info:", self.guild_support_info)
|
|
-- PrintTable(self.guild_support_info)
|
|
-- print("==WQ==:GuildModel [end]")
|
|
if vo.type == 1 then--新增协助
|
|
--先防止加入相同id的协助
|
|
local have_same = false
|
|
for k,v in pairs(self.guild_support_info) do
|
|
if v.support_sid == vo.support_sid then
|
|
break
|
|
end
|
|
end
|
|
if have_same then return end
|
|
--把新增的数据插入进去
|
|
vo.type = nil
|
|
table.insert(self.guild_support_info,vo)
|
|
elseif vo.type == 2 then--删除协助
|
|
if vo.support_sid == 0 then--如果id是0,则要把列表中所有的封印裂隙协助删除
|
|
for k,v in pairs(self.guild_support_info) do
|
|
if v.support_cfg_id == 2 then
|
|
self.guild_support_info[k] = nil
|
|
end
|
|
end
|
|
else
|
|
for k,v in pairs(self.guild_support_info) do
|
|
if v.support_sid == vo.support_sid then
|
|
self.guild_support_info[k] = nil
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
self:Fire(GuildModel.UPDATE_GUILD_COLLECT_SUPPORT_INFO_LIST)
|
|
end
|
|
|
|
--设置自己当前协助唯一ID 40046
|
|
function GuildModel:SetSelfGuildSupportId( self_support_sid )
|
|
self.self_support_sid = self_support_sid
|
|
end
|
|
function GuildModel:GetSelfGuildSupportId( )
|
|
return self.self_support_sid
|
|
end
|
|
|
|
--协助状态 40046
|
|
function GuildModel:SetGuildSupportStatus( value )
|
|
self.self_support_status = value
|
|
end
|
|
function GuildModel:GetGuildSupportStatus( )
|
|
return self.self_support_status
|
|
end
|
|
--获得自己当前玩法的协助配置ID
|
|
function GuildModel:GetSelfServerSupportCfgId( )
|
|
local list = self:GetGuildSupportInfo()
|
|
local self_id = self:GetSelfGuildSupportId()
|
|
for i,v in ipairs(list) do
|
|
if v.support_sid == self_id then
|
|
return v.support_cfg_id
|
|
end
|
|
end
|
|
end
|
|
|
|
--获取当前自己的协助他人要攻击的 boss_id
|
|
function GuildModel:GetGuildSupportBossId( )
|
|
local boss_id = 0
|
|
local support_info = self:GetCurSupportPlayerInfo( )
|
|
if support_info then
|
|
return support_info.boss_id
|
|
end
|
|
return boss_id
|
|
end
|
|
|
|
--设置个人协助奖励 40047
|
|
function GuildModel:SetGuildSupportAwardInfo( scmd )
|
|
if not self.guild_support_award_info then self.guild_support_award_info = {} end
|
|
self.guild_support_award_info[#self.guild_support_award_info + 1] = scmd
|
|
end
|
|
function GuildModel:GetGuildSupportAwardInfo( )
|
|
return self.guild_support_award_info[1]
|
|
end
|
|
|
|
--当前感谢的礼包唯一ID 40048
|
|
function GuildModel:SetGuildSupportThankId( guild_support_thank_cfg_id )
|
|
self.guild_support_thank_cfg_id = guild_support_thank_cfg_id
|
|
end
|
|
--得到感谢的礼包唯一ID
|
|
function GuildModel:GetGuildSupportThankId( )
|
|
return self.guild_support_thank_cfg_id
|
|
end
|
|
|
|
--当前感谢界面信息 40049
|
|
function GuildModel:SetGuildSupportThankInfo( scmd )
|
|
self.guild_support_thank_info = scmd
|
|
end
|
|
--当前感谢界面信息
|
|
function GuildModel:GetGuildSupportThankInfo( )
|
|
return self.guild_support_thank_info
|
|
end
|
|
|
|
--设置玩家每日获得的名望券 40046(弃用20200817)
|
|
function GuildModel:SetDaliyReputation( guild_daliy_reputation )
|
|
-- if not self.guild_daliy_reputation then
|
|
-- self.guild_daliy_reputation = guild_daliy_reputation
|
|
-- else
|
|
-- if guild_daliy_reputation > self.guild_daliy_reputation then
|
|
-- local goods_name = GoodsModel:getInstance():getGoodsName(Config.ConfigNotNormalGoods[4].goods_id)
|
|
-- local str = string.format("%s增加<color=#10aaf1>%s</color>",goods_name,guild_daliy_reputation - self.guild_daliy_reputation)
|
|
-- -- Message.show(str)
|
|
-- end
|
|
-- self.guild_daliy_reputation = guild_daliy_reputation
|
|
-- end
|
|
end
|
|
|
|
-- 根据协议返回的协助唯一id,判断是否可以弹出拼单感谢界面
|
|
function GuildModel:ShowGuildSpellListThankView(support_id, option_type)
|
|
self.cur_guild_spelllist_thankId = support_id or self.cur_guild_spelllist_thankId
|
|
if not self.cur_guild_spelllist_thankId then return end
|
|
|
|
-- 是否在社团拼单界面,不是则什么也不操作
|
|
if not self._is_in_guild_spelllist_view then
|
|
return
|
|
end
|
|
-- 根据唯一协助id获取相应类型的支援数据
|
|
local support_data = self:GetSupportThankDataByTypeAndId(GuildModel.SupportThankType.SpellList, self.cur_guild_spelllist_thankId)
|
|
if support_data then
|
|
self:Fire(GuildModel.OPEN_GUILD_SL_THANK_VIEW, true, support_data)
|
|
end
|
|
end
|
|
-- 清除当前缓存的缓存感谢协助id
|
|
function GuildModel:ClearGuildSpellListCurSupportThankId( )
|
|
self.cur_guild_spelllist_thankId = nil
|
|
end
|
|
|
|
--获得协助玩家信息
|
|
function GuildModel:GetCurSupportPlayerInfo( )
|
|
local self_support_sid = self:GetSelfGuildSupportId()
|
|
local info = self:GetGuildSupportInfo()
|
|
for k,v in pairs(info) do
|
|
if v.support_sid == self_support_sid then
|
|
return v
|
|
end
|
|
end
|
|
end
|
|
|
|
--设置协助感谢列表
|
|
function GuildModel:SetSupportThankList( list )
|
|
self.support_thank_list = {}
|
|
local no_send_list = {}
|
|
local is_send_list = {}
|
|
local red_bool = false
|
|
if #list > 0 then
|
|
for i,v in ipairs(list) do
|
|
if v.is_send == 1 then
|
|
is_send_list[#is_send_list + 1] = v
|
|
else
|
|
no_send_list[#no_send_list + 1] = v
|
|
end
|
|
end
|
|
local sort_func = function ( a, b )--最新的要排在最前面
|
|
return a.support_id > b.support_id
|
|
end
|
|
if #no_send_list > 0 then
|
|
if #no_send_list > 1 then
|
|
table.sort(no_send_list, sort_func)
|
|
end
|
|
for i,v in ipairs(no_send_list) do
|
|
self.support_thank_list[#self.support_thank_list + 1] = v
|
|
end
|
|
red_bool = true
|
|
end
|
|
if #is_send_list > 0 then
|
|
if #is_send_list > 1 then
|
|
table.sort(is_send_list, sort_func)
|
|
end
|
|
for i,v in ipairs(is_send_list) do
|
|
self.support_thank_list[#self.support_thank_list + 1] = v
|
|
end
|
|
end
|
|
end
|
|
self.support_red_list[GuildModel.SupportTab.Thank] = red_bool
|
|
self:UpdateSupportMainIconRedDot()
|
|
-- 检查当前是否可以弹出感谢界面
|
|
self:ShowGuildSpellListThankView()
|
|
self:Fire(GuildModel.UPDATE_SUPPORT_THANK_LIST)
|
|
end
|
|
|
|
--获得协助感谢列表
|
|
function GuildModel:GetSupportThankList( )
|
|
return self.support_thank_list
|
|
end
|
|
|
|
-- 根据指定类型和协助id获取协助数据
|
|
function GuildModel:GetSupportThankDataByTypeAndId(type, support_id)
|
|
if type and support_id then
|
|
for k, v in pairs(self.support_thank_list) do
|
|
if v.type == type and v.support_id == support_id then
|
|
return v
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
--设置协助感谢领取列表
|
|
function GuildModel:SetSupportGiftList( list )
|
|
self.support_gift_list = {}
|
|
local no_get_list = {}
|
|
local is_get_list = {}
|
|
local red_bool = false
|
|
if #list > 0 then
|
|
for i,v in ipairs(list) do
|
|
if v.is_get == 1 then
|
|
is_get_list[#is_get_list + 1] = v
|
|
else
|
|
no_get_list[#no_get_list + 1] = v
|
|
end
|
|
end
|
|
local sort_func = function ( a, b )--最新的要排在最前面
|
|
return a.support_id > b.support_id
|
|
end
|
|
if #no_get_list > 0 then
|
|
if #no_get_list > 1 then
|
|
table.sort(no_get_list, sort_func)
|
|
end
|
|
for i,v in ipairs(no_get_list) do
|
|
self.support_gift_list[#self.support_gift_list + 1] = v
|
|
end
|
|
red_bool = true
|
|
end
|
|
if #is_get_list > 0 then
|
|
if #is_get_list > 1 then
|
|
table.sort(is_get_list, sort_func)
|
|
end
|
|
for i,v in ipairs(is_get_list) do
|
|
self.support_gift_list[#self.support_gift_list + 1] = v
|
|
end
|
|
end
|
|
end
|
|
self.support_red_list[GuildModel.SupportTab.Gift] = red_bool
|
|
self:UpdateSupportMainIconRedDot()
|
|
self:Fire(GuildModel.UPDATE_SUPPORT_GIFT_LIST)
|
|
end
|
|
|
|
--获得协助感谢列表
|
|
function GuildModel:GetSupportGiftList( )
|
|
return self.support_gift_list
|
|
end
|
|
|
|
--更新协助主界面icon红点
|
|
function GuildModel:UpdateSupportMainIconRedDot( )
|
|
local red_bool = false
|
|
for i,v in pairs(self.support_red_list) do
|
|
if v then
|
|
red_bool = true
|
|
break
|
|
end
|
|
end
|
|
if self.support_red_list[GuildModel.SupportTab.List] and RoleManager.Instance.mainRoleInfo.level >= 96 and not self.support_is_self_send then--自己发的不需要SOS
|
|
MsgManager:getInstance():Add({type=Config.ConfigMainIcon.TipType.support},have_red)
|
|
else
|
|
MsgManager:getInstance():Remove(Config.ConfigMainIcon.TipType.support)
|
|
end
|
|
if self.support_red_list[GuildModel.SupportTab.Thank] then
|
|
else
|
|
self:Fire(GuildModel.CLOSE_GUILD_SUPPORT_TIP_VIEW)
|
|
end
|
|
GlobalEventSystem:Fire(EventName.REFRESH_MAIN_UI_SUPPORT_RED_DOT, red_bool)
|
|
|
|
if self.support_is_self_send then
|
|
self.support_is_self_send = false
|
|
end
|
|
end
|
|
|
|
-- 本国团战相关协议 start
|
|
-- 设置本轮团战与玩家对战的社团信息 41001
|
|
function GuildModel:SetCSGRFightInfo(vo)
|
|
self.csgr_fight_info = vo.arena_list[1]
|
|
-- 置顶自己的社团
|
|
local guild_id = RoleManager.Instance.mainRoleInfo.guild_id
|
|
local sort_func = function ( a, b )
|
|
if a.guild_id ~= guild_id and b.guild_id ~= guild_id then
|
|
return a.guild_id < b.guild_id
|
|
else
|
|
return a.guild_id == guild_id
|
|
end
|
|
end
|
|
|
|
if self.csgr_fight_info and self.csgr_fight_info.guilds then
|
|
table.sort(self.csgr_fight_info.guilds, sort_func)
|
|
end
|
|
end
|
|
function GuildModel:GetCSGRFightInfo( )
|
|
return self.csgr_fight_info
|
|
end
|
|
|
|
-- 更新本国团战采集buff信息 41003
|
|
function GuildModel:SetCSGRCollectBuffs(vo)
|
|
if not vo then return end
|
|
self.csgr_collect_buff = {}
|
|
for k, v in ipairs(vo.buff_goods) do
|
|
self.csgr_collect_buff[v.attr_id] = v
|
|
end
|
|
end
|
|
function GuildModel:GetCSGRCollectBuffs(attr_id)
|
|
if not attr_id then
|
|
return self.csgr_collect_buff
|
|
else
|
|
return self.csgr_collect_buff[attr_id]
|
|
end
|
|
end
|
|
|
|
-- 更新本国团战战场物资信息 41004
|
|
function GuildModel:SetCSGRBattlefieldRes(vo)
|
|
if not vo then return end
|
|
self.csgr_bf_res = {}
|
|
for k, v in ipairs(vo.resources) do
|
|
self.csgr_bf_res[v.attr_id] = v
|
|
end
|
|
self.csgr_bf_res_refreshtime = vo.next_time
|
|
end
|
|
function GuildModel:GetCSGRBattlefieldRes(attr_id)
|
|
if not attr_id then
|
|
return self.csgr_bf_res
|
|
else
|
|
return self.csgr_bf_res[attr_id]
|
|
end
|
|
end
|
|
function GuildModel:GetCSGRBattlefieldResRefreshTime( )
|
|
return self.csgr_bf_res_refreshtime
|
|
end
|
|
|
|
-- 筛选出距离玩家最近的坐标点前往
|
|
function GuildModel:CSGRAutoFindCollection(vo)
|
|
if not vo then return end
|
|
local scene_mgr = SceneManager:getInstance()
|
|
if not scene_mgr:IsGuildCSGRScene() then return end
|
|
local getDistance = GameMath.GetDistance
|
|
local main_vo = Scene:getInstance():GetMainRole()
|
|
local x, y = main_vo:GetRealPos()
|
|
local min_dis, temp_dis, min_dis_pos
|
|
-- 算出距离玩家坐标最短的坐标点
|
|
for k, attr_pos in ipairs(vo.coordinates) do
|
|
temp_dis = getDistance(x, y, attr_pos.x, attr_pos.y, false)
|
|
if not min_dis or min_dis > temp_dis then
|
|
min_dis = temp_dis
|
|
min_dis_pos = attr_pos
|
|
end
|
|
end
|
|
if min_dis_pos then
|
|
local function call_back()
|
|
GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT)
|
|
end
|
|
local findVo = FindVo.New()
|
|
findVo.type = FindVo.MONSTER
|
|
findVo.x = min_dis_pos.x / SceneObj.LogicRealRatio.x
|
|
findVo.y = min_dis_pos.y / SceneObj.LogicRealRatio.y
|
|
findVo.sceneId = scene_mgr:GetSceneId()
|
|
findVo.id = vo.attr_id
|
|
findVo.call_back = call_back
|
|
GlobalEventSystem:Fire(EventName.FIND, findVo)
|
|
end
|
|
end
|
|
|
|
-- 本国团战结算信息 41007
|
|
function GuildModel:SetGuildCSGRResultData(vo)
|
|
self.guild_csgr_result_data = vo
|
|
end
|
|
function GuildModel:GetGuildCSGRResultData( )
|
|
return self.guild_csgr_result_data
|
|
end
|
|
-- 本国团战相关协议 end
|
|
--------- 社团协议相关代码 end ---------
|
|
|
|
--------- 社团红点提醒相关代码 start ---------
|
|
-- 设置社团申请的状态 11016
|
|
function GuildModel:SetApplyRedPointState(apply_pos)
|
|
-- 通过这个标志量可以不请求社团申请信息直接展示社团申请的红点
|
|
self.member_refresh_check = true
|
|
if apply_pos == 0 then
|
|
if not self.member_apply_red then
|
|
self:Fire(GuildModel.REQUEST_CCMD_EVENT, 40008) -- 请求申请列表
|
|
end
|
|
else
|
|
if not self.pos_apply_red and self:HasAppointPremission(apply_pos) then
|
|
self:Fire(GuildModel.REQUEST_CCMD_EVENT, 40008) -- 请求申请列表
|
|
end
|
|
end
|
|
end
|
|
-- 2020年1月10日修改:统一红点的规则框架,只需要加载两次,数据不更新的情况下获取缓存即可
|
|
function GuildModel:CheckGuildRedDotAll( )
|
|
-- 社团的红点一律需要判断是否加入了社团
|
|
local joined_guild = RoleManager.Instance.mainRoleInfo.guild_id ~= 0
|
|
self.guild_red_cache[Config.ConfigGuild.TabId.MainInfo] = joined_guild and self:CheckGuildInfoRedDot()
|
|
self.guild_red_cache[Config.ConfigGuild.TabId.List] = joined_guild and self:CheckGuildListRedDot()
|
|
self.guild_red_cache[Config.ConfigGuild.TabId.Active] = joined_guild and self:CheckGuildActiveRed()
|
|
self.guild_red_cache[Config.ConfigGuild.TabId.Order] = joined_guild and self:CheckGuildOrderRed()
|
|
self.guild_red_cache[Config.ConfigGuild.TabId.Shop] = joined_guild and self:CheckGuildShopRed()
|
|
-- self.guild_red_cache[Config.ConfigGuild.TabId.Event] = joined_guild and self:CheckGuildEventRed()
|
|
self.guild_red_cache[Config.ConfigGuild.TabId.Event] = false
|
|
self:CheckGuildMainIconRed()
|
|
end
|
|
-- 获取社团红点缓存
|
|
function GuildModel:GetGuildRedDotCache( view_type )
|
|
return not view_type and self.guild_red_cache or self.guild_red_cache[view_type]
|
|
end
|
|
|
|
-- 检查社团模块红点 view_type:界面类型
|
|
function GuildModel:CheckGuildRedDot(view_type, is_all)
|
|
local bool = false
|
|
if view_type == Config.ConfigGuild.TabId.MainInfo then -- 社团主界面信息页签
|
|
bool = self:CheckGuildInfoRedDot()
|
|
elseif view_type == Config.ConfigGuild.TabId.List then -- 社团列表页签
|
|
bool = self:CheckGuildListRedDot()
|
|
elseif view_type == Config.ConfigGuild.TabId.Active then -- 社团活跃页签
|
|
bool = self:CheckGuildActiveRed()
|
|
elseif view_type == Config.ConfigGuild.TabId.Order then -- 社团拼单页签
|
|
bool = self:CheckGuildOrderRed()
|
|
elseif view_type == Config.ConfigGuild.TabId.Shop then -- 社团商店页签
|
|
bool = self:CheckGuildShopRed()
|
|
elseif view_type == Config.ConfigGuild.TabId.Event then -- 社团活动页签
|
|
-- bool = self:CheckGuildEventRed()
|
|
self:CheckGuildEventRed() --检测红点 但不使用红点,检测红点只给活动页签"进行中"标志使用
|
|
bool = false
|
|
end
|
|
-- 社团的红点一律需要判断是否加入了社团
|
|
local guild_id = RoleManager.Instance.mainRoleInfo.guild_id
|
|
self.guild_red_cache[view_type] = bool and guild_id ~= 0
|
|
self:Fire(GuildModel.UPDATE_RED_DOT_BY_TYPE, view_type)
|
|
if is_all then
|
|
self:CheckGuildMainIconRed()
|
|
end
|
|
return bool
|
|
end
|
|
|
|
function GuildModel:CheckGuildMainIconRed( )
|
|
local show = false
|
|
for k,v in pairs(self.guild_red_cache) do
|
|
if v == true then
|
|
show = v
|
|
break
|
|
end
|
|
end
|
|
GlobalEventSystem:Fire(EventName.SHOW_FUNCTION_RED_POINT, 400, show) --通知自己功能按钮红点
|
|
end
|
|
|
|
--检查主页信息红点
|
|
function GuildModel:CheckGuildInfoRedDot()
|
|
local red_packet_red = RedPacketModel:GetInstance():GetGuildRedPacketRed()
|
|
local merge_tip_red = self:CheckGuildMergeTipRed()
|
|
return red_packet_red or merge_tip_red
|
|
end
|
|
-- 检查社团低活跃情况时的合并提示
|
|
function GuildModel:CheckGuildMergeTipRed( )
|
|
self.merge_tip_red = false
|
|
if self:HasOperatePermission(GuildModel.MgrPermission.MergeGuild) then -- 有合并权限的玩家才可以显示红点
|
|
local cookie_warpper = CookieWrapper.Instance
|
|
local next_tip_time = cookie_warpper:GetCookie(CookieLevelType.Account, CookieKey.GUILD_NEXT_MERGE_TIP_TIME)
|
|
local cur_time = TimeUtil:getServerTime()
|
|
if not next_tip_time or next_tip_time < cur_time then
|
|
-- 如果需要更新缓存,就代表玩家查看过合并界面,到下一个时间段之前都不会处理合并提示的红点
|
|
if self.save_merge_cache_time then
|
|
local cur_time_data = os.date("*t", cur_time)
|
|
cur_time_data.hour = 0
|
|
cur_time_data.min = 0
|
|
cur_time_data.sec = 0
|
|
-- 低活跃刷新的时间分别时周一和周五,需要推算今日零点距离下一次低活跃刷新的秒数时间缓存起来
|
|
local cur_wday = cur_time_data.wday - 1 -- 值域1~7,周日是1,-1做正常映射,周日特殊处理
|
|
local off_wday
|
|
if cur_time_data.wday >= 1 and cur_wday < 5 then -- 以周五为节点
|
|
off_wday = 5 - cur_wday
|
|
else -- 以下周一为节点
|
|
off_wday = 1 - cur_wday + (cur_wday > 0 and 7 or 0)
|
|
end
|
|
local today_0_clock = os.time(cur_time_data)
|
|
next_tip_time = today_0_clock + off_wday * 86400 - 1
|
|
cookie_warpper:SaveCookie(CookieLevelType.Account, CookieTimeType.TYPE_ALWAYS, CookieKey.GUILD_NEXT_MERGE_TIP_TIME, next_tip_time)
|
|
cookie_warpper:WriteAll()
|
|
else -- 不更新时间缓存以及到了下一个结算时间段的情况,就刷新红点状态
|
|
local merge_condition = self:GetGuildMergeConditionCfg()
|
|
if merge_condition and merge_condition.open == 1 then
|
|
local basic_info = self:GetGuildBaseInfo()
|
|
local guild_division = basic_info and basic_info.division or 0
|
|
local division_lv_list = stringtotable(merge_condition.merge_lv)
|
|
local can_merge = false
|
|
for k,v in pairs(division_lv_list) do
|
|
if v == guild_division then
|
|
can_merge = true
|
|
end
|
|
end
|
|
self.merge_tip_red = can_merge
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return self.merge_tip_red
|
|
end
|
|
function GuildModel:GetGuildMergeTipRed( )
|
|
return self.merge_tip_red
|
|
end
|
|
function GuildModel:SetGuildSaveMergeCacheTimeFlag(bool)
|
|
local need_refresh = self.save_merge_cache_time ~= bool
|
|
self.save_merge_cache_time = bool
|
|
if need_refresh then -- 状态变化,刷新红点
|
|
self:CheckGuildRedDot(Config.ConfigGuild.TabId.MainInfo, true)
|
|
end
|
|
end
|
|
-- 检查列表页签红点
|
|
function GuildModel:CheckGuildListRedDot( )
|
|
local bool = self:CheckGuildListApplyRed()
|
|
return bool
|
|
end
|
|
-- 获取社团人员管理红点
|
|
function GuildModel:CheckGuildListApplyRed( )
|
|
-- 社团申请的红点需要管理才可以操作
|
|
-- 入团申请红点,需要拥有审批入会权限
|
|
self.member_apply_red = #self.apply_guild_list > 0
|
|
and self:HasOperatePermission(GuildModel.MgrPermission.PassJoinApply) or false
|
|
|
|
-- 职位申请红点,需要逐个判断
|
|
self.pos_apply_red = false
|
|
for k, v in ipairs(self.apply_pos_list) do
|
|
if self:HasAppointPremission(v.position) then
|
|
self.pos_apply_red = true
|
|
break
|
|
end
|
|
end
|
|
|
|
-- 社团合并红点
|
|
self.member_merge_red = self.guild_merge_info and #self.guild_merge_info.fapplys > 0
|
|
and self:HasOperatePermission(GuildModel.MgrPermission.MergeGuild) or false -- 接收方才需要红点
|
|
|
|
-- 申请入团和职位以及合并请求的红点,在关闭申请管理界面后消除
|
|
return (self.member_apply_red or self.pos_apply_red or self.member_merge_red) and self.member_refresh_check
|
|
end
|
|
-- 获取入团申请,职位申请和合并申请按钮的红点
|
|
function GuildModel:GetGuildMemberApplyRed( )
|
|
return self.member_apply_red
|
|
end
|
|
function GuildModel:GetGuildPosApplyRed( )
|
|
return self.pos_apply_red
|
|
end
|
|
function GuildModel:GetGuildMemberMergeRed( )
|
|
return self.member_merge_red
|
|
end
|
|
function GuildModel:CheckMemberRedDot( )
|
|
if self.member_refresh_check then
|
|
self.member_refresh_check = false
|
|
self:CheckGuildRedDot(Config.ConfigGuild.TabId.List, true)
|
|
end
|
|
end
|
|
|
|
-- 获取社团活跃红点
|
|
function GuildModel:CheckGuildActiveRed()
|
|
local bool = self:GetGuildActiveProgressRed()
|
|
bool = bool or self:CheckGuildActiveTaskRed()
|
|
return bool
|
|
end
|
|
|
|
-- 获取社团活跃社团进度奖励红点
|
|
function GuildModel:GetGuildActiveProgressRed(id)
|
|
-- 若个人活跃没有达到阈值则直接false
|
|
local p_active_require = self:GetGuildKvByKey("min_active_require").val
|
|
if p_active_require > self.personal_active then return false end
|
|
-- 获取活跃配置以及当前相应的活跃值和活跃阶段
|
|
local act_cfg = self:GetActiveRewardCfg()
|
|
local bool = false
|
|
for k, v in ipairs(act_cfg) do
|
|
if v.id == self.guild_active_stage + 1 and self.guild_active >= v.need then -- 当前阶段是已领取阶段的下一阶段,且超过了该阶段需要的活跃值
|
|
bool = id == nil or v.id == id
|
|
break
|
|
end
|
|
end
|
|
return bool
|
|
end
|
|
|
|
-- 获取社团活跃任务红点
|
|
function GuildModel:CheckGuildActiveTaskRed( )
|
|
-- 获取玩家当前活跃任务的领取情况
|
|
local bool = false
|
|
local active_task_progress = self:GetGuildActiveTaskData()
|
|
for k, v in pairs(active_task_progress) do
|
|
if v.state == 1 then -- 可领取
|
|
bool = true
|
|
break
|
|
end
|
|
end
|
|
return bool
|
|
end
|
|
|
|
-- 获取社团拼单页签红点
|
|
function GuildModel:CheckGuildOrderRed( )
|
|
-- 暂时屏蔽次数红点
|
|
if not self.guild_order_login_red then return false end
|
|
local sl_data = self:GetGuildSpellListData()
|
|
local total_num = self:GetGuildKvByKey("accept_limit").val
|
|
-- 有剩余次数就给红点
|
|
if sl_data and total_num - sl_data.ordered > 0 then
|
|
return true
|
|
else
|
|
-- 没有拼单的红点的话,登录红点也不需要存在了
|
|
self.guild_order_login_red = false
|
|
return false
|
|
end
|
|
-- return self.guild_order_login_red and sl_data and total_num - sl_data.ordered > 0 or false
|
|
end
|
|
|
|
-- 检查商店红点
|
|
function GuildModel:CheckGuildShopRed( )
|
|
local guild_coin = RoleManager.Instance.mainRoleInfo.guild_contribute
|
|
local coin_threashold = self:GetGuildKvByKey("store_reddot").val
|
|
local goods_list = self:GetGuildShopGoodsList()
|
|
-- 判断当前是否有龙神券可购买
|
|
self.guild_shop_special_item_red = {}
|
|
local can_buy_capsule_ticket = false
|
|
local can_buy_goods = false -- 存在可购买的道具
|
|
if goods_list and TableSize(goods_list) > 0 then
|
|
for k, v in pairs(goods_list) do
|
|
if v.id == 1 then -- 龙神单抽券
|
|
if v.can_buy then -- 可以购买
|
|
local cost_cfg = stringtotable(v.cost)[1]
|
|
can_buy_capsule_ticket = cost_cfg[3] <= guild_coin
|
|
self.guild_shop_special_item_red[v.id] = can_buy_capsule_ticket
|
|
end
|
|
-- break
|
|
can_buy_goods = can_buy_goods or v.can_buy
|
|
end
|
|
end
|
|
end
|
|
-- 当存在龙神单抽券可购买 或 社团货币超过提示的值且允许显示超过值的阈值 则 给红点
|
|
return can_buy_capsule_ticket or ((guild_coin >= coin_threashold) and can_buy_goods and self.show_guild_shop_red) or false
|
|
end
|
|
|
|
function GuildModel:GetGuildShopSpecialItemRedById(id)
|
|
return self.guild_shop_special_item_red[id] or false
|
|
end
|
|
|
|
-- 检查社团活动红点
|
|
function GuildModel:CheckGuildEventRed( )
|
|
local bool = false
|
|
for k, v in pairs(self.guild_event_tab_red) do
|
|
bool = v or bool
|
|
end
|
|
return bool
|
|
end
|
|
function GuildModel:GetGuildEventTabRed(type)
|
|
return type and self.guild_event_tab_red[type] or false
|
|
end
|
|
--------- 社团红点提醒相关代码 end ---------
|
|
|
|
--------- 社团数据获取相关代码 start ---------
|
|
-- 获取社团信息界面用的社团成员信息
|
|
function GuildModel:GetGuildMemberListForInfoView( )
|
|
local tb = {}
|
|
local role_id = RoleManager.Instance.mainRoleInfo.role_id
|
|
local role_data = nil
|
|
for k, v in pairs(self.member_list) do
|
|
-- 筛选出玩家数据
|
|
if v.role_id ~= role_id then
|
|
tb[#tb+1] = v
|
|
else
|
|
role_data = v
|
|
end
|
|
end
|
|
local sort_func = function ( a, b )
|
|
if a.online_flag ~= b.online_flag then
|
|
-- if a.online_flag == 1 then -- 在线置顶
|
|
-- return true
|
|
-- elseif b.online_flag == 1 then
|
|
-- return false
|
|
-- else
|
|
return a.online_flag > b.online_flag
|
|
-- end
|
|
else
|
|
return a.power > b.power
|
|
end
|
|
end
|
|
table.sort(tb, sort_func)
|
|
-- 玩家数据前置
|
|
if role_data then
|
|
table.insert(tb, 1, role_data)
|
|
end
|
|
return tb
|
|
end
|
|
|
|
-- 获取社团信息界面用的社团成员信息
|
|
-- s_type : 特殊类型 不传则什么也不做 1 社团拼单邀请,需要加一个假人数据
|
|
function GuildModel:GetGuildMemberListForInviteView(s_type)
|
|
local tb = {}
|
|
local role_id = RoleManager.Instance.mainRoleInfo.role_id
|
|
for k, v in pairs(self.member_list) do
|
|
-- 筛选出玩家数据
|
|
if v.role_id ~= role_id then
|
|
tb[#tb+1] = v
|
|
end
|
|
end
|
|
local sort_func = function ( a, b )
|
|
if a.online_flag ~= b.online_flag then
|
|
return a.online_flag > b.online_flag
|
|
else
|
|
return a.power > b.power
|
|
end
|
|
end
|
|
table.sort(tb, sort_func)
|
|
if s_type then
|
|
if s_type == 1 then -- 社团拼单添加假人
|
|
local has_inserted = false
|
|
local fake_role = {
|
|
role_id = 1,
|
|
vip_flag = 0,
|
|
sup_vip_type = 0,
|
|
name = "社团助手",
|
|
}
|
|
for k, v in ipairs(tb) do
|
|
if v.online_flag == 0 then -- 检查到这个位置是离线玩家,则插入数据
|
|
table.insert(tb, k, fake_role)
|
|
has_inserted = true
|
|
break
|
|
end
|
|
end
|
|
if not has_inserted then -- 如果上面没有插入社团ai数据,则在这边补充
|
|
table.insert(tb, fake_role)
|
|
end
|
|
end
|
|
end
|
|
return tb
|
|
end
|
|
|
|
-- 获取对应职位的玩家信息
|
|
function GuildModel:GetMemberDataByPosition(position)
|
|
local tb = {}
|
|
for k, v in pairs(self.member_list) do
|
|
if v.position == position then
|
|
tb[#tb+1] = v
|
|
end
|
|
end
|
|
return tb
|
|
end
|
|
-- 踢出玩家后,前端自行处理本地社团成员缓存
|
|
function GuildModel:UpdateMemberAfterKick(kick_id)
|
|
for k, v in pairs(self.member_list) do
|
|
if v.role_id == kick_id then
|
|
table.remove(self.member_list, k)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 根据社团等级获取对应特殊职位的人数
|
|
function GuildModel:GetPositionNum( position )
|
|
if not position then return 0 end
|
|
if position == GuildModel.GuildPosition.Agency then return 1 end
|
|
local guild_lv = self.base_info.guild_lv or 1
|
|
for k, cfg in pairs(Config.Guildlv) do
|
|
if cfg.lv == guild_lv then
|
|
local pos_list = stringtotable(cfg.pos_list)
|
|
for k2, pos_data in pairs(pos_list) do
|
|
if pos_data[1] == position then
|
|
return pos_data[2]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return 0
|
|
end
|
|
|
|
-- 根据目标职位获取申请人列表
|
|
function GuildModel:GetPositionApplyList(position)
|
|
local tb = {}
|
|
if position then
|
|
for k, v in ipairs(self.apply_member_list) do
|
|
if v.position == position then
|
|
tb[#tb+1] = v
|
|
end
|
|
end
|
|
end
|
|
return tb
|
|
end
|
|
|
|
--创建花火大会客户端怪物
|
|
function GuildModel:CreateGuildPartyMonster( )
|
|
if not self.feast_monster_vo then
|
|
self.feast_monster_vo = MonsterVo.New()
|
|
self.feast_monster_vo.instance_id = GuildModel.FEAST_MONSTER_INSTANCE_ID
|
|
self.feast_monster_vo.type_id = self:GetGuildKvByKey("ballroom").val
|
|
|
|
local cfg_data = ConfigItemMgr.Instance:GetMonsterDataItem(self.feast_monster_vo.type_id)
|
|
if cfg_data then
|
|
self.feast_monster_vo.monster_res = cfg_data.icon
|
|
self.feast_monster_vo.name = cfg_data.name
|
|
self.feast_monster_vo.type = 0
|
|
self.feast_monster_vo.move_speed = cfg_data.speed
|
|
self.feast_monster_vo.icon_scale = 5--tonumber(cfg_data.icon_scale)
|
|
end
|
|
|
|
self.feast_monster_vo:SetBasePropertyFromConfig()
|
|
local mon_pos = stringtotable(self:GetGuildKvByKey("ballroom_position").val)[1]
|
|
self.feast_monster_vo.pos_x = mon_pos[1]
|
|
self.feast_monster_vo.pos_y = mon_pos[2]
|
|
|
|
|
|
if self.feast_monster_vo.monster_res == 0 then
|
|
return --暂时没处理
|
|
end
|
|
|
|
self.feast_monster_vo.level = 1
|
|
self.feast_monster_vo.hp=1
|
|
self.feast_monster_vo.mp=1
|
|
self.feast_monster_vo.maxHp=1
|
|
self.feast_monster_vo.maxMp=1
|
|
self.feast_monster_vo.guaji_flag = 1
|
|
self.feast_monster_vo.hide_flag = false
|
|
self.feast_monster_vo.can_attack = 0
|
|
self.feast_monster_vo.can_pick = 0
|
|
self.feast_monster_vo.is_hide_nameboard = true
|
|
self.feast_monster_vo.is_client_monster = true --是否是客户端怪物
|
|
self.feast_monster_vo.client_default_action = "close"
|
|
local info = self.feast_info
|
|
if info and info.status == 1 then
|
|
self.feast_monster_vo.client_default_action = "open"
|
|
self.feast_monster_vo.client_default_speed = 0.3
|
|
end
|
|
SceneManager.Instance:AddMonsterVo(self.feast_monster_vo, false)
|
|
end
|
|
end
|
|
function GuildModel:DeleteGuildPartyMonster( )
|
|
self.feast_monster_vo = nil
|
|
SceneManager.Instance:DeleteClientMonstersByInstanceId(GuildModel.FEAST_MONSTER_INSTANCE_ID)
|
|
end
|
|
|
|
-- 根据目标职位和战力及活跃条件获取社团成员列表(社团职位分配界面用)
|
|
-- sort_type 12战力排序规则:1降序 2升序 34活跃排序规则:3降序 4升序
|
|
function GuildModel:GetMemDataByPosAndSortCondition(pos, sort_type)
|
|
local mem_list = DeepCopy(self:GetGuildMemberList())
|
|
-- 缓存各种排序规则
|
|
local sort_func_list = {
|
|
[1] = function (a, b)
|
|
return a.power > b.power
|
|
end,
|
|
[2] = function (a, b)
|
|
return a.power < b.power
|
|
end,
|
|
[3] = function (a, b)
|
|
return a.total_labor > b.total_labor
|
|
end,
|
|
[4] = function (a, b)
|
|
return a.total_labor < b.total_labor
|
|
end,
|
|
}
|
|
local type_func = sort_func_list[sort_type]
|
|
local sort_func = function ( a, b )
|
|
if a.position == pos and b.position ~= pos then
|
|
return true
|
|
elseif a.position ~= pos and b.position == pos then
|
|
return false
|
|
else
|
|
return type_func(a, b)
|
|
end
|
|
end
|
|
table.sort(mem_list, sort_func)
|
|
return mem_list
|
|
end
|
|
|
|
-- 根据玩家的离线情况和战斗力排序 type:1战力降序 2战力升序 3在线在前战力降序 4离线在前战力降
|
|
function GuildModel:GetMemDataByOnlineAndPower(type)
|
|
local mem_list = DeepCopy(self:GetGuildMemberList())
|
|
-- 缓存各种排序规则
|
|
local sort_func_list = {
|
|
[1] = function (a, b)
|
|
return a.power > b.power
|
|
end,
|
|
[2] = function (a, b)
|
|
return a.power < b.power
|
|
end,
|
|
[3] = function (a, b)
|
|
if a.online_flag ~= b.online_flag then
|
|
return a.online_flag == 1
|
|
-- if a.online_flag == 1 then -- 在线置顶
|
|
-- return true
|
|
-- elseif b.online_flag == 1 then
|
|
-- return false
|
|
-- else
|
|
-- return a.online_flag > b.online_flag
|
|
-- end
|
|
else
|
|
return a.power > b.power
|
|
end
|
|
end,
|
|
[4] = function (a, b)
|
|
if a.online_flag ~= b.online_flag then
|
|
return a.online_flag == 0
|
|
-- if a.online_flag == 0 then -- 在线置顶
|
|
-- return true
|
|
-- elseif b.online_flag == 0 then
|
|
-- return false
|
|
-- else
|
|
-- return a.online_flag > b.online_flag
|
|
-- end
|
|
else
|
|
return a.power > b.power
|
|
end
|
|
end,
|
|
}
|
|
local type_func = sort_func_list[type]
|
|
local sort_func = function ( a, b )
|
|
return type_func(a, b)
|
|
end
|
|
table.sort(mem_list, sort_func)
|
|
return mem_list
|
|
end
|
|
|
|
--获得社团支持名字
|
|
function GuildModel:GetSupportTypeName( boss_type )
|
|
if boss_type == Config.ConfigBoss.ModuleId.World then
|
|
return "世界BOSS"
|
|
elseif boss_type == Config.ConfigBoss.ModuleId.Money then
|
|
return "赏金幻魔"
|
|
elseif boss_type == Config.ConfigBoss.ModuleId.Person then
|
|
return "专属幻魔"
|
|
elseif boss_type == Config.ConfigBoss.ModuleId.Collect then
|
|
return "裂隙首领"
|
|
elseif boss_type == Config.ConfigBoss.ModuleId.Deserted then
|
|
return "星域幻魔"
|
|
end
|
|
end
|
|
|
|
function GuildModel:CancelCollectSupport()--取消采集协助
|
|
local support_status = self:GetGuildSupportStatus( )--离开社团驻地时且是协助他人 取消协助
|
|
if support_status == 1 or support_status == 2 then
|
|
self:Fire(GuildModel.REQUEST_CCMD_EVENT, 40053)
|
|
end
|
|
end
|
|
|
|
-- 发布社团招募
|
|
function GuildModel:SendRecruitMsg( )
|
|
local vo = self:GetGuildBaseInfo()
|
|
if not vo then
|
|
return
|
|
end
|
|
local guild_lv_cfg = Config.Guildlv[vo.guild_lv]
|
|
if vo.member_num >= (guild_lv_cfg.member_capacity + GuildModel:getInstance():GetAddMemNum()) then
|
|
Message.show("社团成员已满,无需招募")
|
|
else
|
|
if Status.NowTime - self.last_recruit_time > 30 then
|
|
local content = string.format("<color=#d322ff>【%s】</color>社团招贤纳士,欢迎各界人士加入!<color=#2cf89a><a@guild_rec@%s>[我要申请]</color></a>"
|
|
,vo.guild_name,vo.guild_id)
|
|
ChatModel:getInstance():Fire(ChatModel.SEND_MSG, ChatModel.CHANNEL_WORLD, content, 0, nil, ChatModel.CHAT_COMMON_TYPE.SYSTEM)
|
|
self.last_recruit_time = Status.NowTime
|
|
Message.show("发布招募信息成功", "success")
|
|
else
|
|
Message.show("嗓子喊累了,休息下吧~", "fault")
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 发布社团频道传闻信息 msg:信息内容 cd:信息的冷却时间(默认10秒) tips:发送成功后飘字
|
|
function GuildModel:SendGuildChuanwenMsg(msg, tips, cd)
|
|
if not msg or msg == "" then return end
|
|
local vo = self:GetGuildBaseInfo()
|
|
if not vo then
|
|
return
|
|
end
|
|
cd = cd or 10
|
|
if Status.NowTime - self.last_send_chuanwen_time > cd then -- 处于冷却时间内才可以发
|
|
ChatModel:getInstance():Fire(ChatModel.SEND_MSG, ChatModel.CHANNEL_GUILD, msg, 0, nil, ChatModel.CHAT_COMMON_TYPE.SYSTEM)
|
|
self.last_send_chuanwen_time = Status.NowTime
|
|
Message.show(tips or "发布信息成功", "succeed")
|
|
else
|
|
Message.show("嗓子喊累了,休息下吧~", "fault")
|
|
end
|
|
end
|
|
|
|
--社团boss击杀后300的秒内执行特殊拾取逻辑
|
|
function GuildModel:GetSepcialPickLogicOfGBoss()
|
|
if not SceneManager:getInstance():IsGuildScene() then return false end
|
|
local noon_boss_data = self:GetGuildEventByType(GuildEventType.GuildBossNoon)
|
|
if noon_boss_data and noon_boss_data.state == 1 then
|
|
return true
|
|
end
|
|
local night_boss_data = self:GetGuildEventByType(GuildEventType.GuildBossNight)
|
|
if night_boss_data and night_boss_data.state == 1 then
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
|
|
|
|
--------------------------本服团战相关 开始--------------------------
|
|
|
|
--上期明星团长
|
|
function GuildModel:GuildWarSetLastMvp(mvp)
|
|
self.guild_war_info.last_mvp = mvp
|
|
self:Fire(GuildModel.GUILD_WAR_LAST_MVP)
|
|
end
|
|
|
|
--排行数据
|
|
function GuildModel:GuildWarSetRankList(list, i_type)
|
|
--清空数据
|
|
if not list then
|
|
self.guild_war_info = self.guild_war_info or {}
|
|
self.guild_war_info.rank_list = {}
|
|
self.guild_war_info.my_rank_info = {}
|
|
return
|
|
end
|
|
self.guild_war_info.rank_list = self.guild_war_info.rank_list or {}
|
|
self.guild_war_info.my_rank_info = self.guild_war_info.my_rank_info or {}
|
|
|
|
list = list or {}
|
|
if #list >= 2 then
|
|
table.sort(list, function (a, b)
|
|
if a.score ~= b.score then
|
|
return a.score > b.score
|
|
else
|
|
return a.time < b.time
|
|
end
|
|
end)
|
|
end
|
|
|
|
local my_info = {}
|
|
|
|
|
|
if i_type == GuildWarRankView.TAB_ID.PERSON then
|
|
local my_kill_info = {}
|
|
local kill_list_temp = DeepCopy(list)
|
|
local role_name = RoleManager.Instance:GetMainRoleName()
|
|
for i,v in ipairs(list) do
|
|
if v.name == role_name then
|
|
my_info = v
|
|
my_info.my_rank = i
|
|
my_info.score = v.score
|
|
my_info.name = v.name
|
|
my_kill_info = DeepCopy(v)
|
|
end
|
|
v.value_1 = ""
|
|
v.value_2 = v.score
|
|
end
|
|
|
|
local kill_list = {}
|
|
for i,v in ipairs(kill_list_temp) do
|
|
if v.max_kill > 0 then
|
|
table.insert(kill_list, v)
|
|
end
|
|
end
|
|
if #kill_list >= 2 then
|
|
table.sort(kill_list, function (a, b)
|
|
if a.max_kill ~= b.max_kill then
|
|
return a.max_kill > b.max_kill
|
|
else
|
|
return a.continue_kill > b.continue_kill
|
|
end
|
|
end)
|
|
end
|
|
my_kill_info.my_rank = 0
|
|
my_kill_info.max_kill = 0
|
|
my_kill_info.continue_kill = 0
|
|
my_kill_info.value_1 = ""
|
|
my_kill_info.value_2 = string.format("%d击杀%d连斩", 0, 0)
|
|
for i,v in ipairs(kill_list) do
|
|
if v.name == role_name then
|
|
my_kill_info = v
|
|
my_kill_info.my_rank = i
|
|
my_kill_info.max_kill = v.max_kill
|
|
my_kill_info.continue_kill = v.continue_kill
|
|
end
|
|
v.value_1 = ""
|
|
v.value_2 = string.format("%d击杀%d连斩", v.max_kill, v.continue_kill)
|
|
end
|
|
|
|
--击杀榜
|
|
self.guild_war_info.rank_list[3] = kill_list
|
|
self.guild_war_info.my_rank_info[3] = my_kill_info
|
|
|
|
else
|
|
local guild_id = self.base_info.guild_id
|
|
for i,v in ipairs(list) do
|
|
if v.guild_id == guild_id then
|
|
my_info.my_rank = i
|
|
my_info.score = v.score
|
|
my_info.name = v.name
|
|
my_info.value_1 = v.guild_name
|
|
my_info.value_2 = v.score
|
|
end
|
|
v.value_1 = v.guild_name
|
|
v.value_2 = v.score
|
|
end
|
|
end
|
|
|
|
self.guild_war_info.rank_list[i_type] = list
|
|
self.guild_war_info.my_rank_info[i_type] = my_info
|
|
self:Fire(GuildModel.GUILD_WAR_RANK_LIST, i_type)
|
|
end
|
|
|
|
function GuildModel:GuideWarSetPickState(pick_id)
|
|
self.guild_war_info.pick_id = pick_id
|
|
if pick_id ~= 0 then
|
|
self:FindGuideWarTarget(GuildModel.GuildWarTarget.Npc)
|
|
self.guild_war_info.last_pick_id = nil
|
|
end
|
|
self:Fire(GuildModel.GUILD_WAR_PICK_STATE, pick_id)
|
|
end
|
|
|
|
function GuildModel:GuideWarGiveInPick(npc_id)
|
|
if SceneManager:getInstance():IsGuildWarScene() and self:IsGuildWarNpcId(npc_id) then
|
|
--对话确认后,如果有粮食,就去交粮食,没有粮食去找粗粮,
|
|
if self.guild_war_info.pick_id and self.guild_war_info.pick_id ~= 0 then
|
|
self:Fire(GuildModel.REQUEST_CCMD_EVENT,40507, npc_id)
|
|
self.guild_war_info.last_pick_id = self.guild_war_info.pick_id
|
|
else
|
|
self:FindGuideWarTarget(GuildModel.GuildWarTarget.SmallRice)
|
|
end
|
|
end
|
|
end
|
|
|
|
function GuildModel:IsGuideWarPickTypeId(type_id)
|
|
return type_id == GuildModel.GuildWarTarget.SmallRice or type_id == GuildModel.GuildWarTarget.MiddleRice or type_id == GuildModel.GuildWarTarget.BigRice
|
|
end
|
|
|
|
function GuildModel:GuideWarGiveInPickResult()
|
|
--提交之后,自动找粗粮
|
|
self.guild_war_info.last_pick_id = nil
|
|
self:FindGuideWarTarget(GuildModel.GuildWarTarget.SmallRice)
|
|
end
|
|
|
|
function GuildModel:GetRankData(i_type)
|
|
local t1 = self.guild_war_info.rank_list
|
|
local t2 = self.guild_war_info.my_rank_info
|
|
return t1 and t1[i_type] or {}, t2 and t2[i_type] or {}
|
|
end
|
|
|
|
--大战状态信息
|
|
function GuildModel:GuildWarSetInfo(begin_time, end_time, score, max_pool)
|
|
self.guild_war_info.begin_time = begin_time
|
|
self.guild_war_info.end_time = end_time
|
|
self.guild_war_info.score = score
|
|
self.guild_war_info.max_pool = max_pool
|
|
self:Fire(GuildModel.GUILD_WAR_BASE_INFO)
|
|
end
|
|
|
|
--大战状态信息
|
|
function GuildModel:GuildWarProject(cd_time)
|
|
self.guild_war_info = self.guild_war_info or {}
|
|
self.guild_war_info.cd_time = cd_time
|
|
self:Fire(GuildModel.GUILD_WAR_PROJECT)
|
|
end
|
|
|
|
--大战 积分更新
|
|
function GuildModel:GuildWarSetScore(score)
|
|
self.guild_war_info.score = score
|
|
self:Fire(GuildModel.GUILD_WAR_UPDATE_SCROE, score)
|
|
end
|
|
|
|
--大战 积分更新
|
|
function GuildModel:GuildWarSetResult(top_guild, top_guild_chief, my_guild_rank, my_personal_rank, score, kill_rank)
|
|
self.guild_war_info.result = {}
|
|
self.guild_war_info.result.mvp_guild = top_guild
|
|
self.guild_war_info.result.mvp_leader = top_guild_chief
|
|
self.guild_war_info.result.my_guild_rank = my_guild_rank
|
|
self.guild_war_info.result.my_rank = my_personal_rank
|
|
self.guild_war_info.result.my_score = score
|
|
self.guild_war_info.result.kill_rank = kill_rank
|
|
if SceneManager:getInstance():IsGuildWarScene() then
|
|
GlobalEventSystem:Fire(EventName.STOPAUTOFIGHT, false, true)
|
|
else
|
|
self:Fire(GuildModel.GUILD_WAR_RESULT)
|
|
end
|
|
end
|
|
|
|
--大战寻找目标
|
|
function GuildModel:FindGuideWarTarget(i_type)
|
|
if not SceneManager:getInstance():IsGuildWarScene() then
|
|
Message.show("当前不在活动场景中")
|
|
end
|
|
|
|
--如果当前有采集物,继续点采集,则直接去交任务
|
|
if self.guild_war_info.pick_id and self.guild_war_info.pick_id ~= 0 and (i_type == GuildModel.GuildWarTarget.SmallRice or i_type == GuildModel.GuildWarTarget.MiddleRice or i_type == GuildModel.GuildWarTarget.BigRice) then
|
|
i_type = GuildModel.GuildWarTarget.Npc
|
|
end
|
|
|
|
local target_id = false
|
|
local scene_id = 4100
|
|
local list = SceneManager.Instance.monster_vo_list
|
|
if i_type == GuildModel.GuildWarTarget.Boss then
|
|
target_id = GuildModel.GuildWarTarget.Boss
|
|
elseif i_type == GuildModel.GuildWarTarget.SmallRice then
|
|
target_id = GuildModel.GuildWarTarget.SmallRice
|
|
elseif i_type == GuildModel.GuildWarTarget.MiddleRice then
|
|
target_id = GuildModel.GuildWarTarget.MiddleRice
|
|
elseif i_type == GuildModel.GuildWarTarget.BigRice then
|
|
target_id = GuildModel.GuildWarTarget.BigRice
|
|
elseif i_type == GuildModel.GuildWarTarget.Npc then
|
|
list = SceneManager.Instance.npc_vo_list
|
|
target_id = GuildModel.GuildWarTarget.Npc
|
|
end
|
|
|
|
local vo = false
|
|
local vo_list = {}
|
|
local is_npc = target_id == GuildModel.GuildWarTarget.Npc
|
|
for k,v in pairs(list) do
|
|
if (v.type_id == target_id) or (is_npc and ( v.type_id == GuildModel.GuildWarTarget.Npc_1 or v.type_id == GuildModel.GuildWarTarget.Npc_2 or v.type_id == GuildModel.GuildWarTarget.Npc_3 )) then
|
|
table.insert(vo_list, v)
|
|
end
|
|
end
|
|
|
|
if #vo_list > 0 then
|
|
--npc 取最近的一个,粮食随机.bpss,就只有一个
|
|
if is_npc then
|
|
vo = vo_list[1]
|
|
local GameMath_GetDistance = GameMath.GetDistance
|
|
local lx, ly = Scene.Instance.main_role:GetLogicPos()
|
|
local dis = GameMath_GetDistance(lx, ly, vo.pos_x / SceneObj.LogicRealRatio.x, vo.pos_y / SceneObj.LogicRealRatio.y)
|
|
for i,v in ipairs(vo_list) do
|
|
if vo.type_id ~= v.type_id then
|
|
local temp_dis = GameMath_GetDistance(lx, ly, v.pos_x / SceneObj.LogicRealRatio.x, v.pos_y / SceneObj.LogicRealRatio.y)
|
|
if temp_dis < dis then
|
|
vo = v
|
|
dis = temp_dis
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if #vo_list == 1 then
|
|
vo = vo_list[1]
|
|
else
|
|
local idx = math.random(1,#vo_list)
|
|
vo = vo_list[idx]
|
|
end
|
|
end
|
|
end
|
|
|
|
if target_id and vo then
|
|
local findVo = FindVo.New()
|
|
findVo.type = is_npc and FindVo.NPC or FindVo.MONSTER
|
|
findVo.id = vo.type_id
|
|
findVo.x = vo.pos_x / SceneObj.LogicRealRatio.x
|
|
findVo.y = vo.pos_y / SceneObj.LogicRealRatio.y
|
|
findVo.sceneId = scene_id
|
|
GlobalEventSystem:Fire(EventName.FIND,findVo)
|
|
if i_type == GuildModel.GuildWarTarget.Boss then
|
|
GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT)
|
|
else
|
|
self:Fire(GuildModel.GUILD_WAR_START_COLLECT)
|
|
end
|
|
else
|
|
if i_type == GuildModel.GuildWarTarget.Boss then
|
|
--不做处理
|
|
Message.show("结晶守卫还未刷新,请稍后再试")
|
|
elseif i_type == GuildModel.GuildWarTarget.SmallRice then
|
|
Message.show("还未刷新,请稍后再试")
|
|
elseif i_type == GuildModel.GuildWarTarget.MiddleRice then
|
|
return false
|
|
elseif i_type == GuildModel.GuildWarTarget.BigRice then
|
|
return false
|
|
else
|
|
Message.show("还未刷新,请稍后再试")
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
--获取boss的数据
|
|
function GuildModel:GuideWarGetBossVo()
|
|
local list = SceneManager.Instance.monster_vo_list
|
|
local vo = false
|
|
for k,v in pairs(list) do
|
|
if v.type_id == GuildModel.GuildWarTarget.Boss then
|
|
vo = v
|
|
break
|
|
end
|
|
end
|
|
return vo
|
|
end
|
|
|
|
|
|
--获取boss的数据
|
|
function GuildModel:GuideWarGetTargetNum(i_type)
|
|
local list = SceneManager.Instance.monster_vo_list
|
|
local num = 0
|
|
local target_id
|
|
if i_type == GuildModel.GuildWarTarget.BigRice then
|
|
target_id = GuildModel.GuildWarTarget.BigRice
|
|
elseif i_type == GuildModel.GuildWarTarget.SmallRice then
|
|
target_id = GuildModel.GuildWarTarget.SmallRice
|
|
elseif i_type == GuildModel.GuildWarTarget.MiddleRice then
|
|
target_id = GuildModel.GuildWarTarget.MiddleRice
|
|
elseif i_type == GuildModel.GuildWarTarget.Boss then
|
|
target_id = GuildModel.GuildWarTarget.Boss
|
|
end
|
|
|
|
for k,v in pairs(list) do
|
|
if v.type_id == target_id then
|
|
num = num + 1
|
|
end
|
|
end
|
|
return num
|
|
end
|
|
|
|
--获取当前的积分奖励 返回奖励列表
|
|
function GuildModel:GuildWarGetRewardByScroe(score, show_next)
|
|
local reward_list = self.guild_war_info.reward_list
|
|
score = score or 0
|
|
|
|
if not reward_list then
|
|
reward_list = {}
|
|
local config = Config.Guildwarscorereward
|
|
for k,v in pairs(config) do
|
|
table.insert(reward_list, v)
|
|
end
|
|
table.sort(reward_list, function (a, b)
|
|
return a.score < b.score
|
|
end)
|
|
self.guild_war_info.reward_list = reward_list
|
|
end
|
|
if score < reward_list[1].score then
|
|
return show_next and stringtotable(reward_list[1].reward) or {} , false, reward_list[1].score
|
|
elseif score >= reward_list[#reward_list].score then
|
|
return stringtotable(reward_list[#reward_list].reward), true, reward_list[#reward_list].score
|
|
end
|
|
local t = {}
|
|
local cur_step_score = 0
|
|
for i,v in ipairs(reward_list) do
|
|
if reward_list[i] and reward_list[i + 1] and score >= reward_list[i].score and score < reward_list[i + 1].score then
|
|
if show_next then
|
|
t = stringtotable(reward_list[i + 1].reward)
|
|
cur_step_score = reward_list[i + 1].score
|
|
else
|
|
t = stringtotable(reward_list[i].reward)
|
|
cur_step_score = reward_list[i].score
|
|
end
|
|
break
|
|
end
|
|
end
|
|
return t, false, cur_step_score
|
|
end
|
|
|
|
--根据当前社团排名获取社团排名奖励
|
|
function GuildModel:GuildWarGetGuildRewardByRank(rank)
|
|
local config = Config.Guildwarguildreward
|
|
local reward_list = {}
|
|
for k,v in pairs(config) do
|
|
if rank >= v.rank_high and rank <= v.rank_low then
|
|
reward_list = stringtotable(v.reward)
|
|
break
|
|
end
|
|
end
|
|
return reward_list
|
|
end
|
|
|
|
--根据当前积分排名获取积分排名奖励
|
|
function GuildModel:GuildWarGetScoreRewardByRank(rank)
|
|
local config = Config.Guildwarrolereward
|
|
local reward_list = {}
|
|
for k,v in pairs(config) do
|
|
if rank >= v.rank_high and rank <= v.rank_low then
|
|
reward_list = stringtotable(v.reward)
|
|
break
|
|
end
|
|
end
|
|
return reward_list
|
|
end
|
|
|
|
--根据当前击杀排名获取击杀奖励
|
|
function GuildModel:GuildWarGetKillRewardByRank(rank)
|
|
local config = Config.Guildwarkillrank
|
|
local reward_list = {}
|
|
for k,v in pairs(config) do
|
|
if rank == v.rank then
|
|
reward_list = stringtotable(v.reward)
|
|
break
|
|
end
|
|
end
|
|
return reward_list
|
|
end
|
|
|
|
--获取当前排名的奖励列表
|
|
function GuildModel:GuildWarGetRankViewRewardByRankAndType(rank, i_type)
|
|
local reward_list = {}
|
|
if i_type == GuildWarRankView.TAB_ID.PERSON then
|
|
local config = Config.Guildwarrolereward
|
|
for k,v in pairs(config) do
|
|
if rank >= v.rank_high and rank <= v.rank_low then
|
|
reward_list = stringtotable(v.reward)
|
|
break
|
|
end
|
|
end
|
|
elseif i_type == GuildWarRankView.TAB_ID.GUILD then
|
|
local config = Config.Guildwarguildreward
|
|
for k,v in pairs(config) do
|
|
if rank >= v.rank_high and rank <= v.rank_low then
|
|
reward_list = stringtotable(v.reward)
|
|
break
|
|
end
|
|
end
|
|
--mvp社团才有mvp社团奖励
|
|
if rank == 1 then
|
|
local mvp_reward_list = stringtotable(Config.Guildwarkv["star_org_award"]["value_content"])
|
|
local not_exit_list = {}
|
|
for i,v in ipairs(mvp_reward_list) do
|
|
local is_exit = false
|
|
for ii,vv in ipairs(reward_list) do
|
|
if v[1] == vv[11] and v[2] == vv[2] then
|
|
vv[3] = vv[3] + v[3]
|
|
is_exit = true
|
|
break
|
|
end
|
|
end
|
|
if not is_exit then
|
|
table.insert(not_exit_list, v)
|
|
end
|
|
end
|
|
if #not_exit_list > 0 then
|
|
for i,v in ipairs(not_exit_list) do
|
|
table.insert(reward_list, v)
|
|
end
|
|
end
|
|
end
|
|
|
|
elseif i_type == GuildWarRankView.TAB_ID.KILL then
|
|
local config = Config.Guildwarkillrank
|
|
for k,v in pairs(config) do
|
|
if v.rank == rank then
|
|
reward_list = stringtotable(v.reward)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return reward_list
|
|
end
|
|
|
|
--获取当前排名的奖励列表
|
|
function GuildModel:GuildWarGetRankNumByType(i_type)
|
|
self.guild_war_info = self.guild_war_info or {}
|
|
self.guild_war_info.rank_num = self.guild_war_info.rank_num or {}
|
|
if i_type == GuildWarRankView.TAB_ID.PERSON then
|
|
if not self.guild_war_info.rank_num[i_type] then
|
|
self.guild_war_info.rank_num[i_type] = {}
|
|
local config = Config.Guildwarrolereward
|
|
local max_low = 0
|
|
for k,v in pairs(config) do
|
|
if v.rank_low > max_low then
|
|
max_low = v.rank_low
|
|
end
|
|
end
|
|
for i=1,max_low do
|
|
self.guild_war_info.rank_num[i_type][i] = true
|
|
end
|
|
end
|
|
return self.guild_war_info.rank_num[i_type]
|
|
|
|
elseif i_type == GuildWarRankView.TAB_ID.GUILD then
|
|
if not self.guild_war_info.rank_num[i_type] then
|
|
self.guild_war_info.rank_num[i_type] = {}
|
|
local config = Config.Guildwarguildreward
|
|
local max_low = 0
|
|
for k,v in pairs(config) do
|
|
if v.rank_low > max_low then
|
|
max_low = v.rank_low
|
|
end
|
|
end
|
|
for i=1,max_low do
|
|
self.guild_war_info.rank_num[i_type][i] = true
|
|
end
|
|
end
|
|
return self.guild_war_info.rank_num[i_type]
|
|
|
|
elseif i_type == GuildWarRankView.TAB_ID.KILL then
|
|
if not self.guild_war_info.rank_num[i_type] then
|
|
local config = Config.Guildwarkillrank
|
|
self.guild_war_info.rank_num[i_type] = config
|
|
end
|
|
return self.guild_war_info.rank_num[i_type]
|
|
end
|
|
return {}
|
|
end
|
|
|
|
--是否还在大战中
|
|
function GuildModel:IsInGuildWar()
|
|
local cur_time = TimeUtil:getServerTime()
|
|
local t = self.guild_war_info
|
|
if t and t.end_time and t.begin_time then
|
|
return cur_time > t.begin_time and cur_time < t.end_time
|
|
end
|
|
return false
|
|
end
|
|
|
|
--获取boss下次刷新时间
|
|
function GuildModel:GuildWarGetNextBossBornTime()
|
|
if not self:IsInGuildWar() then
|
|
return 0, 0
|
|
end
|
|
local cur_time = TimeUtil:getServerTime()
|
|
local config = Config.Guildwarkv.refresh_boss
|
|
local t = stringtotable(config.value_content)
|
|
local list = {}
|
|
for i,v in ipairs(t) do
|
|
--第几个boss出生的时间,是前面的时间的总和
|
|
local total_time = 0
|
|
for ii=1,i do
|
|
total_time = tonumber(t[ii]) + total_time
|
|
end
|
|
table.insert(list, total_time + self.guild_war_info.begin_time)
|
|
end
|
|
local time = 0 --刷新时间
|
|
local idx = 0 --第几只boss
|
|
for i,v in ipairs(list) do
|
|
if cur_time <= v then
|
|
time = v
|
|
idx = i
|
|
break
|
|
end
|
|
end
|
|
return time, idx
|
|
end
|
|
|
|
--检测活动是否开放
|
|
function GuildModel:GuildWarCheckIconBoolOpen(state, end_time)
|
|
local vo =
|
|
{
|
|
state = state,
|
|
etime = end_time,
|
|
}
|
|
self:SetGuildEventByType(GuildEventType.GuildWar, vo)
|
|
end
|
|
|
|
--是否是本服团战交粮的npcid
|
|
function GuildModel:IsGuildWarNpcId(type_id)
|
|
return (type_id == GuildModel.GuildWarTarget.Npc_1) or (type_id == GuildModel.GuildWarTarget.Npc_2) or (type_id == GuildModel.GuildWarTarget.Npc_3)
|
|
end
|
|
|
|
GuildModel.GUILD_WAR_NPC_TALK_CONTENT =
|
|
{
|
|
[1] = "干得好,这正是我们急需的物资!",
|
|
[2] = "请先去采集物资再来吧!\n<color=#2CF86F>(高级物资需击杀BOSS掉落)</color>",
|
|
}
|
|
|
|
--获取Npc对话文本
|
|
function GuildModel:GetGuildWarNpcTalkContent()
|
|
if self:GuildWarIsInPickState() then
|
|
return GuildModel.GUILD_WAR_NPC_TALK_CONTENT[1]
|
|
end
|
|
return GuildModel.GUILD_WAR_NPC_TALK_CONTENT[2]
|
|
end
|
|
|
|
--是否在采集状态
|
|
function GuildModel:GuildWarIsInPickState()
|
|
return SceneManager.Instance:IsGuildWarScene() and
|
|
SceneManager:getInstance():IsGuildWarScene() and self.guild_war_info.pick_id and self.guild_war_info.pick_id ~= 0
|
|
end
|
|
--------------------------本服团战相关 结束--------------------------
|
|
--------------------------本国团战相关 start--------------------------
|
|
function GuildModel:CalInCSGRSafePos(pos_x, pos_y)
|
|
-- 如果存在活动且在入场阶段,则需要限制在安全区内
|
|
if self.guild_evt_data[GuildEventType.GuildCSGR] and self.guild_evt_data[GuildEventType.GuildCSGR].status == 1 then
|
|
if SceneManager.Instance:IsSafePos(pos_x, pos_y) then -- 安全区内,自由移动
|
|
-- 缓存当前帧所在的坐标
|
|
self.csgr_scene_last_pos.x = pos_x
|
|
self.csgr_scene_last_pos.y = pos_y
|
|
return pos_x, pos_y
|
|
else
|
|
-- 当前位置会超出安全区,则需要返回上一帧的坐标
|
|
if self.csgr_scene_last_pos.x == 0 or self.csgr_scene_last_pos.y == 0 then
|
|
return pos_x, pos_y
|
|
else
|
|
return self.csgr_scene_last_pos.x, self.csgr_scene_last_pos.y
|
|
end
|
|
end
|
|
else
|
|
return pos_x, pos_y
|
|
end
|
|
end
|
|
-- 根据不同的需求获取本国团战采集怪配置
|
|
function GuildModel:GetCSGRCollectCfg(attr_id)
|
|
self.csgr_collect_cfg_data = self.csgr_collect_cfg_data or stringtotable(Config.Campwarkv["material_attr"].val)
|
|
if not self.csgr_collect_cfg_data2 then
|
|
self.csgr_collect_cfg_data2 = {}
|
|
for k, v in ipairs(self.csgr_collect_cfg_data) do
|
|
self.csgr_collect_cfg_data2[v[1]] = v
|
|
end
|
|
end
|
|
if attr_id then
|
|
return self.csgr_collect_cfg_data2[attr_id]
|
|
else
|
|
return self.csgr_collect_cfg_data
|
|
end
|
|
end
|
|
function GuildModel:GetCSGRCurBossHp( )
|
|
local percentage = 1
|
|
local max_hp = 10000000000000
|
|
local event_data = self:GetGuildEventByType(GuildEventType.GuildCSGR)
|
|
if event_data and event_data.status == 3 then
|
|
local total_time = event_data.end_time - event_data.start_time - 5
|
|
local pass_time = TimeUtil:getServerTime() - event_data.start_time
|
|
percentage = 1 - (pass_time / total_time)
|
|
percentage = percentage <= 0 and 0 or percentage
|
|
else
|
|
percentage = 0
|
|
end
|
|
local monsterHp = max_hp * percentage
|
|
return monsterHp, max_hp, percentage
|
|
end
|
|
-- 血量变化计时器
|
|
function GuildModel:StartCSGRBossHpTimer( )
|
|
self:StopCSGRBossHpTimer()
|
|
local function csgr_boss_hp_func()
|
|
local monsterHp, max_hp, percentage = self:GetCSGRCurBossHp()
|
|
self:Fire(GuildModel.UPDATE_CSGR_BOSS_HP, monsterHp, max_hp, percentage)
|
|
end
|
|
self.guild_csgr_hp_timer = GlobalTimerQuest:AddPeriodQuest(csgr_boss_hp_func, 0.5, -1)
|
|
end
|
|
function GuildModel:StopCSGRBossHpTimer( )
|
|
if self.guild_csgr_hp_timer then
|
|
GlobalTimerQuest:CancelQuest(self.guild_csgr_hp_timer)
|
|
self.guild_csgr_hp_timer = nil
|
|
end
|
|
end
|
|
-- 判断当前本国团战是否在采集阶段
|
|
function GuildModel:IsCSGRInCollectRound( )
|
|
local b = false
|
|
local event_data = self:GetGuildEventByType(GuildEventType.GuildCSGR)
|
|
if event_data then
|
|
b = event_data.status == 2 -- 2为采集阶段
|
|
end
|
|
return b
|
|
end
|
|
-- 更新本国团战自动采集状态
|
|
function GuildModel:UpdateCSGRAutoCollectFlag(flag)
|
|
self.csgr_auto_collect = false
|
|
-- 场景内切换自动采集,中断当前的采集状态
|
|
if SceneManager:getInstance():IsGuildCSGRScene() and self:IsCSGRInCollectRound() then
|
|
GlobalEventSystem:Fire(EventName.CANCEL_TO_COLLECT)
|
|
Scene.Instance:CancelClickTarget(nil,true) --把目标清掉
|
|
self.csgr_auto_collect = flag
|
|
end
|
|
end
|
|
function GuildModel:GetCSGRAUtoCollectStatus( )
|
|
return self.csgr_auto_collect
|
|
end
|
|
function GuildModel:CSGRAutoCollect()
|
|
if self.csgr_auto_collect then
|
|
local nearest_mon = Scene:getInstance():GetNearestGuildCollectMonsterByTypeId()
|
|
if nearest_mon then
|
|
local function call_back()
|
|
Scene.Instance:SetClickTarget(nearest_mon, true)
|
|
end
|
|
local findVo = FindVo.New()
|
|
findVo.type = FindVo.MONSTER
|
|
findVo.x = nearest_mon.vo.pos_x / SceneObj.LogicRealRatio.x
|
|
findVo.y = nearest_mon.vo.pos_y / SceneObj.LogicRealRatio.y
|
|
findVo.sceneId = SceneManager:getInstance():GetSceneId()
|
|
findVo.id = nearest_mon.vo.type_id
|
|
findVo.call_back = call_back
|
|
GlobalEventSystem:Fire(EventName.FIND, findVo)
|
|
else -- 没有采集物,或者在九宫格以外,需要前端查找可以采集的对象发送协议自动移动到目的地
|
|
local temp_buff_list = {} -- 临时表,用来存储有剩余的采集buff信息
|
|
local collect_cfg_data = self:GetCSGRCollectCfg()
|
|
-- 筛选出当前还有剩余的采集物
|
|
for k, v in ipairs(collect_cfg_data) do
|
|
local buff_data = self:GetCSGRBattlefieldRes(v[1])
|
|
if buff_data and buff_data.num > 0 then
|
|
table.insert(temp_buff_list, v)
|
|
end
|
|
end
|
|
local ramdom_cfg = temp_buff_list[math.random(1, #temp_buff_list)]
|
|
local attr_icon = ramdom_cfg and ramdom_cfg[1]
|
|
if attr_icon then
|
|
self:Fire(GuildModel.REQUEST_CCMD_EVENT, 41008, attr_icon)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
--------------------------本国团战相关 end--------------------------
|
|
--------- 社团数据获取相关代码 end ---------
|
|
|
|
--获取社团竞榜增加人数
|
|
function GuildModel:GetAddMemNum( )
|
|
if GuildModel:getInstance().base_info and GuildModel:getInstance().base_info.add_mem_num then
|
|
return GuildModel:getInstance().base_info.add_mem_num
|
|
end
|
|
return 0
|
|
end
|
|
|
|
--判断是否是社团类功能id
|
|
function GuildModel:GetIsGuildModel( model_id )
|
|
model_id = model_id or 0
|
|
self.guild_model_id_list = self.guild_model_id_list or {[142] = true,[400] = true,[405] = true,[406] = true,[408] = true}
|
|
return self.guild_model_id_list[model_id] and true or false
|
|
end
|
|
|
|
----------社团跑环答题-start---------
|
|
-- 获取最大答题数 需要答对数
|
|
function GuildModel:GetQuizTimesKv( )
|
|
local cfg = stringtotable(Config.Guildrunassistkv["answer_times"].val)
|
|
return cfg[1], cfg[2]
|
|
end
|
|
|
|
-- 设置答题数据
|
|
function GuildModel:SetGuildQuizID( vo )
|
|
self.cur_guild_quiz_id = vo.quiz_id
|
|
self.guild_quiz_seq = vo.index
|
|
end
|
|
|
|
-- 获取当前题目id 和 题目索引
|
|
function GuildModel:GetGuildQuizID( )
|
|
return self.cur_guild_quiz_id, self.guild_quiz_seq
|
|
end
|
|
|
|
-- 初始化答题数据
|
|
function GuildModel:InitGuildQuizData( support_sid )
|
|
-- self.guild_quiz_seq = 1 -- 进度第一题
|
|
self.cur_guild_quiz_id = nil
|
|
self.guild_quiz_seq = 1
|
|
self.guild_quiz_get_times = 0 -- 答对的数目
|
|
self.guild_quiz_support_sid = support_sid or 0 -- 本次答题的协助id
|
|
end
|
|
|
|
-- 获取本次答题协助剩余时间
|
|
function GuildModel:GetCurQuizRemainTime( )
|
|
local data = self:GetGuildSupportInfoById( self.guild_quiz_support_sid )
|
|
if not data then return 0 end
|
|
local _, end_time = self:ParseData(data.kv_data)
|
|
local time = end_time - TimeUtil:getServerTime( )
|
|
return time
|
|
end
|
|
|
|
-- 答题后的数据更新 41702
|
|
function GuildModel:UpdateGuildQuizData( vo )
|
|
self.guild_quiz_get_times = vo.success_quiz
|
|
end
|
|
|
|
-- 获取答对的题目数
|
|
function GuildModel:GetCurCorrectTimes( )
|
|
return self.guild_quiz_get_times or 0
|
|
end
|
|
|
|
-- 获取答题协助奖励列表
|
|
function GuildModel:GetGuildQuizAwardList( )
|
|
-- local temp_award_list = DeepCopy(self.guild_support_cfg[5].support_reward)
|
|
local reward_reputation_count = self.guild_support_cfg[5].reward_reputation
|
|
-- table.insert(temp_award_list, {100, 100003, reward_reputation_count} )
|
|
local temp_award_list = {
|
|
{100, 100003, reward_reputation_count},
|
|
}
|
|
return temp_award_list
|
|
end
|
|
|
|
-- 设置结算数据 41703
|
|
function GuildModel:SetGuildQuizResultData( vo )
|
|
self.quiz_res = vo.res
|
|
end
|
|
|
|
-- 获取答题结果
|
|
function GuildModel:GetGuildQuizResultData( )
|
|
return self.quiz_res
|
|
end
|
|
|
|
-- 重连初始化答题数据
|
|
function GuildModel:ReLinkInitGuildQuizData( vo )
|
|
self.guild_quiz_seq = vo.index or 1 -- 进度第几题
|
|
self.guild_quiz_get_times = vo.success_quiz or 0 -- 答对的数目
|
|
self.guild_quiz_support_sid = vo.sid or 0 -- 本次答题的协助id
|
|
self.cur_guild_quiz_id = vo.quiz_id or 0 -- 当前题目
|
|
end
|
|
|
|
-- 设置战场活动提示红点
|
|
function GuildModel:SetWarActiveRedDot(module_id, module_sub, state)
|
|
local key = module_id .. "@" .. module_sub
|
|
self.war_active_show_red_dot[key] = state or false
|
|
self:Fire(GuildModel.SHOW_ACTIVE_OPEN_TIPS_RED)
|
|
end
|
|
|
|
--获取战场提示红点
|
|
function GuildModel:GetWarActiveRedDot(module_id, module_sub)
|
|
local key = module_id .. "@" .. module_sub
|
|
return self.war_active_show_red_dot[key] or false
|
|
end
|
|
|
|
|
|
function GuildModel:ParseData(str)
|
|
local bosspower = 0
|
|
local end_time = 0
|
|
local boss_id = 0
|
|
local dun_id = 0
|
|
local status = 0
|
|
if str and str ~= "" then
|
|
local info = stringtotable(str)
|
|
if info and #info > 0 then
|
|
for i,v in ipairs(info) do
|
|
local key = tonumber(v[1])
|
|
if key == 1 then
|
|
bosspower = tonumber(v[2])
|
|
elseif key == 2 then
|
|
end_time = tonumber(v[2])
|
|
elseif key == 3 then
|
|
boss_id = tonumber(v[2])
|
|
elseif key == 4 then
|
|
dun_id = tonumber(v[2])
|
|
elseif key == 5 then
|
|
status = tonumber(v[2])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return bosspower, end_time, boss_id, dun_id, status
|
|
end
|
|
----------社团跑环答题-end-----------
|