/// <summary> /// 回池 /// </summary> protected override void toRelease(DataPool pool) { base.toRelease(pool); this.data = null; this.type = 0; }
/// <summary> /// 是否数据一致 /// </summary> protected override bool toDataEquals(BaseData data) { PlayerRoleGroupMemberData mData = (PlayerRoleGroupMemberData)data; if (this.playerID != mData.playerID) { return(false); } if (mData.socialData != null) { if (this.socialData == null) { return(false); } if (!this.socialData.dataEquals(mData.socialData)) { return(false); } } else { if (this.socialData != null) { return(false); } } if (this.title != mData.title) { return(false); } return(true); }
/** 设置职位 */ protected void doSetTitle(PlayerRoleGroupMemberData member, int title, bool needDispatch) { if (needDispatch) { evt.oldTitle = member.title; } _memberTitleCount.addValue(member.title, -1); if (member.title == RoleGroupTitleType.Leader) { _leader = null; } member.title = title; _memberTitleCount.addValue(member.title, 1); if (member.title == RoleGroupTitleType.Leader) { _leader = member; } if (needDispatch) { evt.newTitle = title; evt.groupID = groupID; evt.targetID = member.playerID; me.dispatch(GameEventType.RemoveRoleGroupMember, evt); } }
/// <summary> /// 读取字节流(完整版) /// </summary> protected override void toReadBytesFull(BytesReadStream stream) { base.toReadBytesFull(stream); stream.startReadObj(); BaseData dataT = stream.readDataFullNotNull(); if (dataT != null) { if (dataT is PlayerRoleGroupMemberData) { this.data = (PlayerRoleGroupMemberData)dataT; } else { this.data = new PlayerRoleGroupMemberData(); if (!(dataT.GetType().IsAssignableFrom(typeof(PlayerRoleGroupMemberData)))) { stream.throwTypeReadError(typeof(PlayerRoleGroupMemberData), dataT.GetType()); } this.data.shadowCopy(dataT); } } else { this.data = null; } this.type = stream.readInt(); stream.endReadObj(); }
/// <summary> /// 写入字节流(简版) /// </summary> protected override void toWriteBytesSimple(BytesWriteStream stream) { stream.writeLong(this.groupID); stream.writeLong(this.exp); if (this.members != null) { stream.writeLen(this.members.size()); if (!this.members.isEmpty()) { PlayerRoleGroupMemberData[] membersVValues = this.members.getValues(); for (int membersVI = membersVValues.Length - 1; membersVI >= 0; --membersVI) { PlayerRoleGroupMemberData membersV = membersVValues[membersVI]; if (membersV != null) { if (membersV != null) { stream.writeDataSimpleNotNull(membersV); } else { nullObjError("membersV"); } } } } } else { nullObjError("members"); } }
/** 踢出成员 */ public void kickMember(long memberID) { PlayerRoleGroupMemberData member = getMember(memberID); if (member == null) { me.warnLog("踢出成员时,不存在", member); return; } if (me.role.playerID == memberID) { me.warnLog("踢出成员时,不可踢出自己", memberID); return; } int canKickTitle = RoleGroupTitleConfig.get(_selfData.title).canKickTitle; if (canKickTitle <= 0 || member.title < canKickTitle) { me.warnLog("踢出成员时,权限不足", _selfData.title, member.title); return; } if (member.title == RoleGroupTitleType.Leader) { me.warnLog("踢出成员时,不可提出队长"); return; } me.send(FuncKickMemberRoleGroupRequest.create(_funcID, groupID, memberID)); }
/// <summary> /// 读取字节流(简版) /// </summary> protected override void toReadBytesSimple(BytesReadStream stream) { base.toReadBytesSimple(stream); this.data = (PlayerRoleGroupMemberData)stream.readDataSimpleNotNull(); this.type = stream.readInt(); }
/** 设置数据 */ public void setData(PlayerRoleGroupData data) { _d = data; groupID = data.groupID; _levelConfig = RoleGroupLevelConfig.get(_config.id, data.level); _selfData = _d.members.get(me.role.playerID); }
/** 职位变更 */ public void onSetTitle(long memberID, int title) { PlayerRoleGroupMemberData member = getMember(memberID); if (member != null) { doSetTitle(member, title, true); } }
/// <summary> /// 复制(深拷贝) /// </summary> protected override void toCopy(BaseData data) { if (!(data is PlayerRoleGroupExData)) { return; } PlayerRoleGroupExData mData = (PlayerRoleGroupExData)data; this.groupID = mData.groupID; this.exp = mData.exp; if (mData.members != null) { if (this.members != null) { this.members.clear(); this.members.ensureCapacity(mData.members.size()); } else { this.members = new LongObjectMap <PlayerRoleGroupMemberData>(mData.members.size()); } LongObjectMap <PlayerRoleGroupMemberData> membersT = this.members; if (!mData.members.isEmpty()) { PlayerRoleGroupMemberData[] membersVValues = mData.members.getValues(); for (int membersVI = membersVValues.Length - 1; membersVI >= 0; --membersVI) { PlayerRoleGroupMemberData membersV = membersVValues[membersVI]; if (membersV != null) { PlayerRoleGroupMemberData membersU; if (membersV != null) { membersU = (PlayerRoleGroupMemberData)membersV.clone(); } else { membersU = null; nullObjError("membersU"); } membersT.put(membersU.playerID, membersU); } } } } else { this.members = null; nullObjError("members"); } }
/** 执行改变 */ protected void doRoleGroupChange(PlayerRoleGroupMemberData mData, RoleGroupMemberChangeData data) { switch (data.type) { case RoleGroupMemberChangeType.Title: { doSetTitle(mData, data.arg0, false); } break; } }
/// <summary> /// 读取字节流(完整版) /// </summary> protected override void toReadBytesFull(BytesReadStream stream) { stream.startReadObj(); this.groupID = stream.readLong(); this.exp = stream.readLong(); int membersLen = stream.readLen(); if (this.members != null) { this.members.clear(); this.members.ensureCapacity(membersLen); } else { this.members = new LongObjectMap <PlayerRoleGroupMemberData>(membersLen); } LongObjectMap <PlayerRoleGroupMemberData> membersT = this.members; for (int membersI = membersLen - 1; membersI >= 0; --membersI) { PlayerRoleGroupMemberData membersV; BaseData membersVT = stream.readDataFullNotNull(); if (membersVT != null) { if (membersVT is PlayerRoleGroupMemberData) { membersV = (PlayerRoleGroupMemberData)membersVT; } else { membersV = new PlayerRoleGroupMemberData(); if (!(membersVT.GetType().IsAssignableFrom(typeof(PlayerRoleGroupMemberData)))) { stream.throwTypeReadError(typeof(PlayerRoleGroupMemberData), membersVT.GetType()); } membersV.shadowCopy(membersVT); } } else { membersV = null; } membersT.put(membersV.playerID, membersV); } stream.endReadObj(); }
/// <summary> /// 复制(潜拷贝) /// </summary> protected override void toShadowCopy(BaseData data) { if (!(data is PlayerRoleGroupMemberData)) { return; } PlayerRoleGroupMemberData mData = (PlayerRoleGroupMemberData)data; this.playerID = mData.playerID; this.socialData = mData.socialData; this.title = mData.title; }
/** 添加成员 */ public void onAddMember(PlayerRoleGroupMemberData mData, int type) { _d.members.put(mData.playerID, mData); if (mData.title == RoleGroupTitleType.Leader) { _leader = mData; } evt.type = type; evt.groupID = groupID; evt.targetID = mData.playerID; me.dispatch(GameEventType.AddRoleGroupMember, evt); }
/** 玩家群变更 */ public void onRoleGroupMemberChange(long memberID, RoleGroupMemberChangeData data) { PlayerRoleGroupMemberData member = getMember(memberID); if (member != null) { doRoleGroupChange(member, data); } evt.groupID = groupID; evt.targetID = memberID; evt.memberChangeData = data; me.dispatch(GameEventType.ChangeRoleGroupMemberData, evt); }
/** 成员外显数据变化 */ public void onMemberRoleShowChange(long memberID, RoleShowChangeData data) { PlayerRoleGroupMemberData member = getMember(memberID); if (member != null) { member.socialData.onChange(data); evt.groupID = groupID; evt.targetID = memberID; evt.type = data.type; me.dispatch(GameEventType.ChangeRoleGroupMemberRoleShowData, evt); } }
/** 设置职位 */ public void setTitle(long memberID, int title) { int canSetTitle = RoleGroupTitleConfig.get(_selfData.title).canSetTitle; if (canSetTitle <= 0 || canSetTitle > title) { me.warnLog("设置职位时,没有权限", _selfData.title, title); return; } PlayerRoleGroupMemberData member = getMember(memberID); if (member == null) { me.warnLog("设置职位时,找不到目标成员", memberID); return; } if (member.title == RoleGroupTitleType.Leader || title == RoleGroupTitleType.Leader) { me.warnLog("设置职位时,不能设置队长", memberID, title); return; } if (member.title < canSetTitle) { me.warnLog("设置职位时,没有权限2", _selfData.title, member.title); return; } if (member.title == title) { me.warnLog("设置职位时,当前已是该职位", _selfData.title, member.title); return; } int num = RoleGroupTitleConfig.get(title).num; //超过数目 if (num > 0 && _memberTitleCount.get(title) >= num) { me.warnLog("设置职位时,超过容纳数目", title); return; } me.send(FuncSetTitleRoleGroupRequest.create(_funcID, groupID, memberID, title)); }
/** 移除队员 */ public void onRemoveMember(long playerID, int type) { PlayerRoleGroupMemberData mData = _d.members.remove(playerID); if (mData != null) { if (mData.title == RoleGroupTitleType.Leader) { _leader = null; } } evt.type = type; evt.groupID = groupID; evt.targetID = playerID; me.dispatch(GameEventType.RemoveRoleGroupMember, evt); }
/** 更换队长 */ public void onChangeLeader(long lastLeaderID, long leaderID) { PlayerRoleGroupMemberData lastLeader = getMember(lastLeaderID); if (lastLeader != null) { doSetTitle(lastLeader, _config.joinTitle, false); } PlayerRoleGroupMemberData leader = getMember(leaderID); if (leader != null) { doSetTitle(leader, RoleGroupTitleType.Leader, false); } evt.targetID = lastLeaderID; evt.groupID = groupID; me.dispatch(GameEventType.ChangeRoleGroupLeader, evt); }
/** 从附加数据读取 */ protected void readFromExData(PlayerRoleGroupExData data) { _d.exp = data.exp; _d.members = data.members; _selfData = _d.members.get(me.role.playerID); PlayerRoleGroupMemberData[] values; PlayerRoleGroupMemberData v; for (int i = (values = _d.members.getValues()).Length - 1; i >= 0; --i) { if ((v = values[i]) != null) { if (v.title == RoleGroupTitleType.Leader) { _leader = v; } } } }
/// <summary> /// 复制(深拷贝) /// </summary> protected override void toCopy(BaseData data) { if (!(data is PlayerRoleGroupMemberData)) { return; } PlayerRoleGroupMemberData mData = (PlayerRoleGroupMemberData)data; this.playerID = mData.playerID; if (mData.socialData != null) { this.socialData = (RoleSocialData)mData.socialData.clone(); } else { this.socialData = null; nullObjError("socialData"); } this.title = mData.title; }
/** 读数据后 */ public void afterReadData() { PlayerRoleGroupMemberData[] values; PlayerRoleGroupMemberData v; for (int i = (values = _d.members.getValues()).Length - 1; i >= 0; --i) { if ((v = values[i]) != null) { if (v.title == RoleGroupTitleType.Leader) { _leader = v; } } } if (_d.funcTools != null) { IntObjectMap <FuncToolData> dic = _d.funcTools.get(FuncToolType.Rank); if (dic != null) { FuncToolData[] values2; FuncToolData v2; for (int i2 = (values2 = dic.getValues()).Length - 1; i2 >= 0; --i2) { if ((v2 = values2[i2]) != null) { //设置数据 me.func.getRoleGroupRankTool(v2.funcID).setData(v2); } } } } }
/// <summary> /// 转文本输出 /// </summary> protected override void toWriteDataString(DataWriter writer) { writer.writeTabs(); writer.sb.Append("groupID"); writer.sb.Append(':'); writer.sb.Append(this.groupID); writer.writeEnter(); writer.writeTabs(); writer.sb.Append("exp"); writer.sb.Append(':'); writer.sb.Append(this.exp); writer.writeEnter(); writer.writeTabs(); writer.sb.Append("members"); writer.sb.Append(':'); writer.sb.Append("Map<long,PlayerRoleGroupMemberData>"); if (this.members != null) { writer.sb.Append('('); writer.sb.Append(this.members.size()); writer.sb.Append(')'); writer.writeEnter(); writer.writeLeftBrace(); if (!this.members.isEmpty()) { long membersKFreeValue = this.members.getFreeValue(); long[] membersKKeys = this.members.getKeys(); PlayerRoleGroupMemberData[] membersVValues = this.members.getValues(); for (int membersKI = membersKKeys.Length - 1; membersKI >= 0; --membersKI) { long membersK = membersKKeys[membersKI]; if (membersK != membersKFreeValue) { PlayerRoleGroupMemberData membersV = membersVValues[membersKI]; writer.writeTabs(); writer.sb.Append(membersK); writer.sb.Append(':'); if (membersV != null) { membersV.writeDataString(writer); } else { writer.sb.Append("PlayerRoleGroupMemberData=null"); } writer.writeEnter(); } } } writer.writeRightBrace(); } else { writer.sb.Append("=null"); } writer.writeEnter(); }
/// <summary> /// 是否数据一致 /// </summary> protected override bool toDataEquals(BaseData data) { PlayerRoleGroupExData mData = (PlayerRoleGroupExData)data; if (this.groupID != mData.groupID) { return(false); } if (this.exp != mData.exp) { return(false); } if (mData.members != null) { if (this.members == null) { return(false); } if (this.members.size() != mData.members.size()) { return(false); } LongObjectMap <PlayerRoleGroupMemberData> membersR = mData.members; if (!this.members.isEmpty()) { long membersKFreeValue = this.members.getFreeValue(); long[] membersKKeys = this.members.getKeys(); PlayerRoleGroupMemberData[] membersVValues = this.members.getValues(); for (int membersKI = membersKKeys.Length - 1; membersKI >= 0; --membersKI) { long membersK = membersKKeys[membersKI]; if (membersK != membersKFreeValue) { PlayerRoleGroupMemberData membersV = membersVValues[membersKI]; PlayerRoleGroupMemberData membersU = membersR.get(membersK); if (membersU != null) { if (membersV == null) { return(false); } if (!membersV.dataEquals(membersU)) { return(false); } } else { if (membersV != null) { return(false); } } } } } } else { if (this.members != null) { return(false); } } return(true); }