Esempio n. 1
0
        public bool GrantedChangeStatusFromTo(GuildMemberStatus fromStatus, GuildMemberStatus toStatus)
        {
            GuildMemberStatus myStatus = (GuildMemberStatus)guildStatus;

            if (myStatus == GuildMemberStatus.Moderator)
            {
                if (fromStatus == GuildMemberStatus.Member && toStatus == GuildMemberStatus.Moderator)
                {
                    return(true);
                }
            }
            if (myStatus == GuildMemberStatus.Owner)
            {
                if (fromStatus != GuildMemberStatus.Owner)
                {
                    if (fromStatus != toStatus)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Esempio n. 2
0
        /// <summary>
        /// Changing status of member by other member
        /// </summary>
        /// <param name="sourceCharacterID">Character ID of member who make changes</param>
        /// <param name="targetCharacterID">Character ID of membe who will be changed</param>
        /// <param name="guildID">Target guild id</param>
        /// <param name="status">New status of member</param>
        /// <returns></returns>
        public bool ChangeGuildMemberStatus(string sourceCharacterID, string targetCharacterID, string guildID, int status)
        {
            if (sourceCharacterID == targetCharacterID)
            {
                log.Info("ChangeGuildMemberStatus - don't allow change self status");
                return(false);
            }

            DbObjectWrapper <Guild> guild = null;

            if (!mCache.TryGetGuild(guildID, out guild))
            {
                log.Info("ChangeGuildMemberStatus - guild not found");
                return(false);
            }

            GuildMember sourceMember = null;

            if (!guild.Data.TryGetMember(sourceCharacterID, out sourceMember))
            {
                log.Info("ChangeGuildMemberStatus - source member not found");
                return(false);
            }

            GuildMember targetMember = null;

            if (!guild.Data.TryGetMember(targetCharacterID, out targetMember))
            {
                log.Info("ChangeGuildMemberStatus - target member not found");
                return(false);
            }

            GuildMemberStatus newStatus = (GuildMemberStatus)status;

            if (newStatus == GuildMemberStatus.Moderator)
            {
                if (!guild.Data.addingModersAllowed)
                {
                    log.InfoFormat("ChangeGuildMemberStatus: guild already has maximum count of moderators [green]");
                    return(false);
                }
            }

            GuildMemberStatus sourceStatus = (GuildMemberStatus)sourceMember.guildStatus;
            GuildMemberStatus targetStatus = (GuildMemberStatus)targetMember.guildStatus;


            if (sourceStatus == GuildMemberStatus.Moderator)
            {
                if (targetStatus != GuildMemberStatus.Member)
                {
                    log.Info("ChangeGuildMemberStatus - moderator allow change only members status");
                    return(false);
                }
                if (newStatus != GuildMemberStatus.Moderator)
                {
                    log.Info("ChangeGuildMemberStatus - moderator allow raise status of member to moderator only");
                    return(false);
                }
            }
            else if (sourceStatus == GuildMemberStatus.Owner)
            {
                if (targetStatus == GuildMemberStatus.Owner)
                {
                    log.Info("ChangeGuildMemberStatus  - Don't allow two owners of guild");
                    return(false);
                }
                if (newStatus == targetStatus)
                {
                    log.Info("ChangeGuildMemberStatus - New status same as before status");
                    return(false);
                }
            }

            targetMember.guildStatus = status;
            guild.Changed            = true;

            if (status == (int)GuildMemberStatus.Moderator)
            {
                guild.Data.AddTransaction(CoalitionTransaction.MakeTransaction(CoalitionTransactionType.make_officier, string.Empty, string.Empty, targetMember.characterName, targetMember.characterId));
            }

            SendGuildUpdateEvent(sourceMember.characterId, guild.Data.GetInfo(mApplication));
            SendGuildUpdateEvent(targetMember.characterId, guild.Data.GetInfo(mApplication));

            if (newStatus == GuildMemberStatus.Moderator)
            {
                mApplication.AddAchievmentVariable(targetMember.gameRefId, "coalition_officier", 1);
            }
            return(true);
        }