Ejemplo n.º 1
0
        public void JoinMember(Gang gang, Character member, bool joinChannel)
        {
            _gangRepository.InsertMember(gang, member);

            void Finish()
            {
                gang.SetMember(member);

                var data = new Dictionary <string, object>
                {
                    { k.data, gang.GetGangData() },
                    { k.memberID, member.Id }
                };

                Message.Builder.SetCommand(Commands.GangAddMember).WithData(data).ToCharacters(gang.GetMembers()).Send();

                GangMemberJoined?.Invoke(gang, member);

                if (joinChannel)
                {
                    _channelManager.JoinChannel(gang.ChannelName, member);
                }
            }

            if (Transaction.Current != null)
            {
                Transaction.Current.OnCommited(Finish);
            }
            else
            {
                Finish();
            }
        }
Ejemplo n.º 2
0
        public void RemoveMember(Gang gang, Character member, bool isKick)
        {
            if (gang == null)
            {
                return;
            }

            if (!gang.IsMember(member))
            {
                throw new PerpetuumException(ErrorCodes.CharacterNotInTheCurrentGang);
            }

            _gangRepository.DeleteMember(gang, member);

            void Finish()
            {
                var data = new Dictionary <string, object>
                {
                    { k.data, gang.GetGangData() },
                    { k.memberID, member.Id }
                };

                var cmd = isKick ? Commands.GangKickMember : Commands.GangRemoveMember;

                Message.Builder.SetCommand(cmd).WithData(data).ToCharacters(gang.GetMembers()).Send();

                gang.RemoveMember(member);

                _channelManager.LeaveChannel(gang.ChannelName, member);

                OnGangMemberRemoved(gang, member);
            }

            if (Transaction.Current != null)
            {
                Transaction.Current.OnCommited(Finish);
            }
            else
            {
                Finish();
            }
        }
Ejemplo n.º 3
0
        public void DisbandGang(Gang gang)
        {
            _gangRepository.Delete(gang);

            void Finish()
            {
                Message.Builder.SetCommand(Commands.GangDelete).WithData(gang.GetGangData()).ToCharacters(gang.GetMembers()).Send();
                _channelManager.DeleteChannel(gang.ChannelName);
                _gangs.Remove(gang.Id);
                GangDisbanded?.Invoke(gang);
            }

            if (Transaction.Current != null)
            {
                Transaction.Current.OnCommited(Finish);
            }
            else
            {
                Finish();
            }
        }