/// <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);
    }
Exemple #3
0
    /** 设置职位 */
    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");
        }
    }
Exemple #6
0
    /** 踢出成员 */
    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();
    }
Exemple #8
0
    /** 设置数据 */
    public void setData(PlayerRoleGroupData data)
    {
        _d           = data;
        groupID      = data.groupID;
        _levelConfig = RoleGroupLevelConfig.get(_config.id, data.level);

        _selfData = _d.members.get(me.role.playerID);
    }
Exemple #9
0
    /** 职位变更 */
    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");
        }
    }
Exemple #11
0
 /** 执行改变 */
 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;
    }
Exemple #14
0
    /** 添加成员 */
    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);
    }
Exemple #15
0
    /** 玩家群变更 */
    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);
    }
Exemple #16
0
    /** 成员外显数据变化 */
    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);
        }
    }
Exemple #17
0
    /** 设置职位 */
    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));
    }
Exemple #18
0
    /** 移除队员 */
    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);
    }
Exemple #19
0
    /** 更换队长 */
    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);
    }
Exemple #20
0
    /** 从附加数据读取 */
    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;
    }
Exemple #22
0
    /** 读数据后 */
    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);
    }