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); }
/// <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); }