Files
fc/dev/project/library/imports/e3/e3e73aab-800c-4f65-bd24-9021d2e398b8.js
2026-05-24 10:21:26 +08:00

309 lines
11 KiB
JavaScript

"use strict";
cc._RF.push(module, 'e3e73qrgAxPZb0kkCHS45i4', 'guild_model');
// Scripts/mod/guild/base/guild_model.js
"use strict";
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
// 这里填写详细说明,主要填写该模块的功能简要
// <br/>Create: 2019-01-14 10:57:08
// --------------------------------------------------------------------
var BridgeClass = require("bridge.class");
var GuildListVo = require("guild_list_vo");
var GuildConst = require("guild_const");
var GuildEvent = require("guild_event");
var GuildMyInfoVo = require("guild_my_info_vo");
var RoleController = require("role_controller");
var GuildMemberVo = require("guild_member_vo");
var GuildController = require("guild_controller");
var GuildModel = cc.Class({
"extends": BridgeClass,
ctor: function ctor() {
this.ctrl = GuildController.getInstance();
this.guild_cache_list = {}; // 缓存的当前服务器列表
this.apply_join_list = {}; // 公会申请列表
this.donate_sum = 0; // 今天已经捐献的次数
this.guild_member_list = {}; // 成员列表
this.guild_list = []; // 当前所有的公会列表
this.guild_search_list = []; // 当前待查找的公会列表
this.my_guild_assistant = {}; // 当前副会长的数据
this.donate_rewards = []; // 捐献活跃宝箱清空
},
properties: {},
initConfig: function initConfig() {
this.donate_exp = 0;
},
updateGuildList: function updateGuildList(name, data_list) {
if (name == "") {
this.guild_list = [];
for (var i in data_list) {
var v = data_list[i];
var guild_vo = this.guild_cache_list[Utils.getNorKey(v.gid, v.gsrv_id)];
if (guild_vo == null) {
guild_vo = new GuildListVo();
this.guild_cache_list[Utils.getNorKey(v.gid, v.gsrv_id)] = guild_vo;
}
guild_vo.updateData(v);
this.guild_list.push(guild_vo);
}
} else {
this.guild_search_list = [];
for (var i in data_list) {
var v = data_list[i];
var guild_vo = this.guild_cache_list[Utils.getNorKey(v.gid, v.gsrv_id)];
if (guild_vo == null) {
guild_vo = new GuildListVo();
this.guild_cache_list[Utils.getNorKey(v.gid, v.gsrv_id)] = guild_vo;
}
guild_vo.updateData(v);
this.guild_search_list.push(guild_vo);
}
}
var type = GuildConst.ListType.Total;
var guild_list = this.guild_list;
if (name != "") {
type = GuildConst.ListType.Search;
guild_list = this.guild_search_list;
}
gcore.GlobalEvent.fire(GuildEvent.UpdateGuildList, type, guild_list);
},
//申请某个公会的返回
updateGuildApplyStatus: function updateGuildApplyStatus(gid, gsrv_id, is_apply) {
var guild_list_vo = this.guild_cache_list[Utils.getNorKey(gid, gsrv_id)];
if (guild_list_vo != null) guild_list_vo.setGuildAttribute("is_apply", is_apply);
},
//更新自己公会的基础信息
updateMyGuildInfo: function updateMyGuildInfo(data) {
if (this.my_guild_info == null) this.my_guild_info = new GuildMyInfoVo();
this.my_guild_info.updateData(data);
},
// 清楚联盟相关缓存数据
clearMyGuildInfo: function clearMyGuildInfo() {
this.my_guild_info = null;
this.my_guild_assistant = {};
this.guild_member_list = {};
this.donate_rewards = [];
// 提示关闭(暂时分开设置)
nx.mTip.openTip("guild.donate.tip", false);
nx.mTip.openTip("guild.donate.reward", false);
nx.mTip.openTip("guild.reqJoin", false);
nx.mTip.openTip("guild.active.lvup", false);
nx.mTip.openTip("guild.dailyReward", false);
},
//获取自己公会信息
getMyGuildInfo: function getMyGuildInfo() {
return this.my_guild_info;
},
//更新成员列表,增删
//type:"0:更新 1:添加 2:删除"
updateMyGuildMemberList: function updateMyGuildMemberList(data_list, type) {
var role_vo = RoleController.getInstance().getRoleVo();
if (role_vo == null) return;
if (type == 2) {
for (var i in data_list) {
var v = data_list[i];
this.guild_member_list[Utils.getNorKey(v.rid, v.srv_id)] = null;
if (this.my_guild_assistant[Utils.getNorKey(v.rid, v.srv_id)] != null) {
this.my_guild_assistant[Utils.getNorKey(v.rid, v.srv_id)] = null;
//这里抛出时间更新副会长的数量吧
if (role_vo.position != GuildConst.PositionType.Member) gcore.GlobalEvent.fire(GuildEvent.UpdateAssistantNumEvent);
}
}
} else {
var member_vo = null;
for (var i in data_list) {
var v = data_list[i];
member_vo = this.guild_member_list[Utils.getNorKey(v.rid, v.srv_id)];
//如果之前存在副会长,但是现在没有了的话,就移除掉
if (this.my_guild_assistant[Utils.getNorKey(v.rid, v.srv_id)] != null) {
if (v.post != GuildConst.PositionType.Assistant) {
this.my_guild_assistant[Utils.getNorKey(v.rid, v.srv_id)] = null;
if (role_vo.position != GuildConst.PositionType.Member) gcore.GlobalEvent.fire(GuildEvent.UpdateAssistantNumEvent);
}
} else {
if (v.post == GuildConst.PositionType.Assistant) {
this.my_guild_assistant[Utils.getNorKey(v.rid, v.srv_id)] = v;
if (role_vo.position != GuildConst.PositionType.Member) gcore.GlobalEvent.fire(GuildEvent.UpdateAssistantNumEvent);
}
}
if (member_vo == null) {
member_vo = new GuildMemberVo();
this.guild_member_list[Utils.getNorKey(v.rid, v.srv_id)] = member_vo;
}
if (v.is_self == null) {
v.is_self = RoleController.getInstance().checkIsSelf(v.srv_id, v.rid); //当前是不是自己
}
v.role_post = role_vo.position;
member_vo.updateData(v);
}
}
gcore.GlobalEvent.fire(GuildEvent.UpdateMyMemberListEvent, type);
},
//自己职位变化的时候更改一下成员列表里面的自己职位数据
updateMemberByPosition: function updateMemberByPosition(value) {
if (this.guild_member_list != null) {
for (var k in this.guild_member_list) {
this.guild_member_list[k].setGuildAttribute("role_post", value);
}
}
},
//获取当前副会长的总数
getAssistantSum: function getAssistantSum() {
if (this.my_guild_assistant == null) return;
var sum = 0;
for (var k in this.my_guild_assistant) {
if (this.my_guild_assistant[k] != null) sum = sum + 1;
}
return sum;
},
//获取成员列表
getGuildMemberList: function getGuildMemberList() {
var member_list = [];
for (var k in this.guild_member_list) {
if (this.guild_member_list[k] != null) member_list.push(this.guild_member_list[k]);
}
if (member_list.length > 0) {
member_list.sort(Utils.tableUpperSorter(["online", "post_sort", "donate"]));
}
return member_list;
},
//获取当前申请列表,按照在线,战力以及vip等级从打到小排序
getGuildApplyList: function getGuildApplyList() {
var apply_list = [];
for (var k in this.apply_join_list) {
if (this.apply_join_list[k] != null) apply_list.push(this.apply_join_list[k]);
}
if (apply_list.length > 0) apply_list.sort(Utils.tableUpperSorter(["is_online", "power", "vip_lev"]));
return apply_list;
},
// ===========================================================================
// 工会捐献
// ===========================================================================
// 更新玩家捐献情况
updateDonateInfo: function updateDonateInfo(data_list) {
this.donate_sum = 0;
this.donate_list = [];
for (var i in data_list) {
var v = data_list[i];
this.donate_list[v.type] = v.num;
this.donate_sum = this.donate_sum + v.num;
}
gcore.GlobalEvent.fire(GuildEvent.UpdateDonateInfo);
this.freshDonateTips(true);
},
// 这里表示捐献成功了
setGuildDonateStatus: function setGuildDonateStatus() {
this.donate_sum = this.donate_sum + 1;
this.freshDonateTips();
},
// 判断某一个捐献状态
checkDonateStatus: function checkDonateStatus(type) {
var num = this.donate_list[type];
return [this.donate_sum > 0, num && num > 0];
},
// 捐献活跃宝箱情况
updateDonateBoxInfo: function updateDonateBoxInfo(boxes, donate_exp) {
// 当前公会捐献活跃度
this.donate_exp = donate_exp;
this.donate_rewards = {};
for (var i in boxes) {
this.donate_rewards[boxes[i].box_id] = true;
}
this.freshDonateTips();
},
// 设置某个捐献宝箱的状态
setDonateBoxStatus: function setDonateBoxStatus(box_id) {
if (this.donate_rewards == null) {
this.donate_rewards = {};
}
this.donate_rewards[box_id] = true;
gcore.GlobalEvent.fire(GuildEvent.UpdateDonateBoxStatus, box_id);
this.freshDonateTips();
},
// 别人捐献的时候更新当前捐献进度,可能同步会有红点提示
updateDonateActivity: function updateDonateActivity(value) {
this.donate_exp = value;
gcore.GlobalEvent.fire(GuildEvent.UpdateDonateBoxStatus);
this.freshDonateTips();
},
// 捐献提示更新
freshDonateTips: function freshDonateTips(_can) {
if (!game.configs.guild_data) {
return;
}
// 可捐献
if (_can) {
var tipCan = this.donate_sum == 0;
nx.mTip.openTip("guild.donate.tip", tipCan);
}
// 有奖励
var tipReward = false;
var exp = this.donate_exp || 0;
var boxes = game.configs.guild_data.data_donate_box;
for (var id in boxes) {
var box = boxes[id];
if (exp >= box.box_val && !this.donate_rewards[id]) {
tipReward = true;
break;
}
}
nx.mTip.openTip("guild.donate.reward", tipReward);
},
// ===========================================================================
// 工会管理
// ===========================================================================
// 更新申请列表,
updateApplyJoinList: function updateApplyJoinList(data_list) {
this.apply_join_list = {};
for (var i in data_list) {
var v = data_list[i];
var key = Utils.getNorKey(v.rid, v.srv_id);
this.apply_join_list[key] = v;
}
this.freshApplyJoinTips();
},
// 处理完成某个玩家申请请求之后,在总的申请列表中删除这个数据
deleteApplyInfo: function deleteApplyInfo(rid, srv_id) {
var key = Utils.getNorKey(rid, srv_id);
delete this.apply_join_list[key];
this.freshApplyJoinTips();
},
// 更新提示
freshApplyJoinTips: function freshApplyJoinTips() {
var tip = false;
if (nx.dt.objNEmpty(this.apply_join_list)) {
tip = true;
}
nx.mTip.openTip("guild.reqJoin", tip);
},
// ===========================================================================
// 工会活跃
// ===========================================================================
// 更新提示
freshActiveTips: function freshActiveTips(_data) {
if (!game.configs.guild_quest_data) {
return;
}
var tip = false;
if (_data) {
var DATA = game.configs.guild_quest_data.data_lev_data;
var from = DATA[_data.lev];
var next = DATA[_data.lev + 1];
if (from && next && _data.exp >= from.exp) {
tip = true;
}
}
nx.mTip.openTip("guild.active.lvup", tip);
}
});
cc._RF.pop();