private GuildResultInfo GuildOperationMemberDemote(GuildMember member, Player player, ClientGuildOperation operation) { GuildMember targetMember = null; GuildResultInfo GetResult() { if (!member.Rank.HasPermission(GuildRankPermission.ChangeMemberRank)) { return(new GuildResultInfo(GuildResult.RankLacksSufficientPermissions)); } targetMember = GetMember(operation.TextValue); if (targetMember == null) { return(new GuildResultInfo(GuildResult.CharacterNotInYourGuild, referenceString: operation.TextValue)); } if (member.Rank.Index >= targetMember.Rank.Index) { return(new GuildResultInfo(GuildResult.CannotDemote)); } if (targetMember.Rank.Index == 9) { return(new GuildResultInfo(GuildResult.CannotDemoteLowestRank)); } return(new GuildResultInfo(GuildResult.Success)); } GuildResultInfo info = GetResult(); if (info.Result == GuildResult.Success) { GuildRank newRank = GetDemotedRank(targetMember.Rank.Index); MemberChangeRank(targetMember, newRank); AnnounceGuildMemberChange(targetMember); AnnounceGuildResult(GuildResult.DemotedMember, referenceText: operation.TextValue); } return(info); }
private void GuildOperationSetNameplateAffiliation(GuildMember member, Player player, ClientGuildOperation operation) { player.GuildManager.UpdateGuildAffiliation(Id); }
private void GuildOperationInitGuildWindow(GuildMember member, Player player, ClientGuildOperation operation) { // Probably want to send roster update }
private GuildResultInfo GuildOperationRankPermissions(GuildMember member, Player player, ClientGuildOperation operation) { GuildRank rank = null; GuildResultInfo GetResult() { if (!member.Rank.HasPermission(GuildRankPermission.EditLowerRankPermissions)) { return(new GuildResultInfo(GuildResult.RankLacksRankRenamePermission)); } rank = GetRank((byte)operation.Rank); if (rank == null) { return(new GuildResultInfo(GuildResult.InvalidRank, operation.Rank, operation.TextValue)); } // TODO: check if mask options are valid for this guild type if (member.Rank.Index >= operation.Rank) { return(new GuildResultInfo(GuildResult.CanOnlyModifyLowerRanks)); } return(new GuildResultInfo(GuildResult.Success)); } GuildResultInfo info = GetResult(); if (info.Result == GuildResult.Success) { // TODO: research why disabled needs to be removed var permissions = (GuildRankPermission)operation.Data.UInt32Data & ~GuildRankPermission.Disabled; rank.Permissions = permissions; AnnounceGuildRankChange(); AnnounceGuildResult(GuildResult.RankModified, operation.Rank, operation.TextValue); } return(info); }
private void GuildOperationRosterRequest(GuildMember member, Player player, ClientGuildOperation operation) { SendGuildRoster(player.Session); }
private GuildResultInfo GuildOperationTaxUpdate(GuildMember member, Player player, ClientGuildOperation operation) { GuildResultInfo GetResult() { if (member.Rank.Index > 0) { return(new GuildResultInfo(GuildResult.RankLacksSufficientPermissions)); } return(new GuildResultInfo(GuildResult.Success)); } GuildResultInfo result = GetResult(); if (result.Result == GuildResult.Success) { if (Convert.ToBoolean(operation.Data)) { SetFlag(GuildFlag.Taxes); } else { RemoveFlag(GuildFlag.Taxes); } SendToOnlineUsers(new ServerGuildFlagUpdate { RealmId = WorldServer.RealmId, GuildId = Id, Value = (uint)Flags }); } return(result); }
private GuildResultInfo GuildOperationCommunityPlotReservationRemoval(GuildMember member, Player player, ClientGuildOperation operation) { if (!member.Rank.HasPermission(GuildRankPermission.RemoveCommunityPlotReservation)) { return(new GuildResultInfo(GuildResult.RankLacksSufficientPermissions)); } GuildMember targetMember = GetMember(operation.TextValue); if (targetMember == null) { throw new InvalidPacketValueException(); } ResidenceChild child = Residence.GetChild(targetMember.CharacterId); if (child == null) { throw new InvalidPacketValueException(); } // removing the reservation does not remove the plot only removes the permanent status child.IsTemporary = true; targetMember.CommunityPlotReservation = -1; AnnounceGuildMemberChange(targetMember); return(new GuildResultInfo(GuildResult.Success)); }
private GuildResultInfo GuildOperationRankAdd(GuildMember member, Player player, ClientGuildOperation operation) { GuildResultInfo GetResult() { if (!member.Rank.HasPermission(GuildRankPermission.CreateAndRemoveRank)) { return(new GuildResultInfo(GuildResult.RankLacksRankRenamePermission)); } if (GetRank((byte)operation.Rank) != null) { return(new GuildResultInfo(GuildResult.InvalidRank, operation.Rank, operation.TextValue)); } if (RankExists(operation.TextValue)) { return(new GuildResultInfo(GuildResult.DuplicateRankName, referenceString: operation.TextValue)); } if (!TextFilterManager.Instance.IsTextValid(operation.TextValue) || !TextFilterManager.Instance.IsTextValid(operation.TextValue, UserText.GuildRankName)) { return(new GuildResultInfo(GuildResult.InvalidRankName, referenceString: operation.TextValue)); } // TODO: check if mask options are valid for this guild type return(new GuildResultInfo(GuildResult.Success)); } GuildResultInfo info = GetResult(); if (info.Result == GuildResult.Success) { AddRank((byte)operation.Rank, operation.TextValue, (GuildRankPermission)operation.Data.UInt32Data); AnnounceGuildRankChange(); AnnounceGuildResult(GuildResult.RankCreated, operation.Rank, operation.TextValue); } return(info); }
private GuildResultInfo GuildOperationRankDelete(GuildMember member, Player player, ClientGuildOperation operation) { GuildRank rank = null; GuildResultInfo GetResult() { if (!member.Rank.HasPermission(GuildRankPermission.CreateAndRemoveRank)) { return(new GuildResultInfo(GuildResult.RankLacksRankRenamePermission)); } rank = GetRank((byte)operation.Rank); if (rank == null) { return(new GuildResultInfo(GuildResult.InvalidRank, operation.Rank, operation.TextValue)); } if (member.Rank.Index >= operation.Rank) { return(new GuildResultInfo(GuildResult.CanOnlyModifyLowerRanks)); } if (operation.Rank < 2 || operation.Rank > 8) { return(new GuildResultInfo(GuildResult.CannotDeleteDefaultRanks, referenceId: operation.Rank)); } if (rank.Any()) { return(new GuildResultInfo(GuildResult.CanOnlyDeleteEmptyRanks)); } return(new GuildResultInfo(GuildResult.Success)); } GuildResultInfo info = GetResult(); if (info.Result == GuildResult.Success) { RemoveRank((byte)operation.Rank); AnnounceGuildRankChange(); AnnounceGuildResult(GuildResult.RankDeleted, referenceText: operation.TextValue); } return(info); }
private GuildResultInfo GuildOperationMemberRemove(GuildMember member, Player player, ClientGuildOperation operation) { GuildMember targetMember = null; GuildResultInfo GetResult() { if (!member.Rank.HasPermission(GuildRankPermission.Kick)) { return(new GuildResultInfo(GuildResult.RankLacksRankRenamePermission)); } targetMember = GetMember(operation.TextValue); if (targetMember == null) { return(new GuildResultInfo(GuildResult.CharacterNotInYourGuild, referenceString: operation.TextValue)); } if (member.Rank.Index >= targetMember.Rank.Index) { return(new GuildResultInfo(GuildResult.CannotKickHigherOrEqualRankedMember)); } return(CanLeaveGuild(targetMember)); } GuildResultInfo info = GetResult(); if (info.Result == GuildResult.Success) { // if the player is online handle through the local manager otherwise directly in the guild ICharacter targetCharacter = CharacterManager.Instance.GetCharacterInfo(targetMember.CharacterId); if (targetCharacter is Player targetPlayer) { targetPlayer.GuildManager.LeaveGuild(Id, GuildResult.KickedYou); } else { LeaveGuild(targetMember); } AnnounceGuildResult(GuildResult.KickedMember, referenceText: targetCharacter.Name); } return(info); }
private GuildResultInfo GuildOperationMemberQuit(GuildMember member, Player player, ClientGuildOperation operation) { GuildResultInfo info = CanLeaveGuild(member); if (info.Result == GuildResult.Success) { player.GuildManager.LeaveGuild(Id, GuildResult.YouQuit); AnnounceGuildResult(GuildResult.MemberQuit, referenceText: player.Name); } return(info); }
private GuildResultInfo GuildOperationMemberInvite(GuildMember member, Player player, ClientGuildOperation operation) { Player target = null; GuildResultInfo GetResult() { if (!member.Rank.HasPermission(GuildRankPermission.Invite)) { return(new GuildResultInfo(GuildResult.RankLacksSufficientPermissions)); } target = CharacterManager.Instance.GetPlayer(operation.TextValue); if (target == null) { return(new GuildResultInfo(GuildResult.UnknownCharacter, referenceString: operation.TextValue)); } return(target.GuildManager.CanInviteToGuild(Id)); } GuildResultInfo info = GetResult(); if (info.Result != GuildResult.Success) { return(info); } target.GuildManager.InviteToGuild(Id, player); return(new GuildResultInfo(GuildResult.InviteSent, referenceString: operation.TextValue)); }
private GuildResultInfo GuildOperationDisband(GuildMember member, Player player, ClientGuildOperation operation) { GuildResultInfo GetResult() { if (member.Rank.Index != 0) { return(new GuildResultInfo(GuildResult.RankLacksSufficientPermissions)); } return(CanDisbandGuild()); } GuildResultInfo info = GetResult(); if (info.Result == GuildResult.Success) { DisbandGuild(); } return(info); }
private GuildResultInfo GuildOperationCommunityPlotReservation(GuildMember member, Player player, ClientGuildOperation operation) { if (!member.Rank.HasPermission(GuildRankPermission.ReserveCommunityPlot)) { return(new GuildResultInfo(GuildResult.RankLacksSufficientPermissions)); } if (operation.Data.Int32Data < -1 || operation.Data.Int32Data > 4) { throw new InvalidPacketValueException(); } Residence residence = player.ResidenceManager.Residence; if (residence == null) { throw new InvalidPacketValueException(); } ResidenceChild sourceResidence = Residence.GetChild(member.CharacterId); if (operation.Data.Int32Data != -1) { ResidenceChild targetResidence = Residence.GetChild((PropertyInfoId)(100 + operation.Data.Int32Data)); if (targetResidence == null) { ResidenceEntrance entrance = GlobalResidenceManager.Instance.GetResidenceEntrance((PropertyInfoId)(100 + operation.Data.Int32Data)); if (entrance == null) { throw new InvalidPacketValueException(); } if (sourceResidence != null) { // current plot reservation must be temporary to reserve a new plot if (!sourceResidence.IsTemporary) { throw new InvalidPacketValueException(); } // for residences on a community just remove the residence // any players on the map at the time can stay in the instance if (residence.Map != null) { residence.Map.RemoveChild(residence); } else { residence.Parent.RemoveChild(residence); } player.Rotation = entrance.Rotation.ToEulerDegrees(); player.TeleportTo(entrance.Entry, entrance.Position, Residence.Id); } else { // move owner to new instance only if not on the same instance as the residence // otherwise they will be moved to the new instance during the unload if (residence.Map != player.Map) { player.Rotation = entrance.Rotation.ToEulerDegrees(); player.TeleportTo(entrance.Entry, entrance.Position, Residence.Id); } // for individual residences remove the entire instance // move any players on the map at the time to the community residence.Map?.Unload(new MapPosition { Info = new MapInfo { Entry = entrance.Entry, InstanceId = Residence.Id, }, Position = entrance.Position }); } // update residence with new plot location and add to community residence.PropertyInfoId = (PropertyInfoId)(100 + operation.Data.Int32Data); if (Residence.Map != null) { Residence.Map.AddChild(residence, false); } else { Residence.AddChild(residence, false); } } else { // can only remove reservation if one already exists if (targetResidence != sourceResidence) { throw new InvalidPacketValueException(); } targetResidence.IsTemporary = false; } } else { // can only remove reservation if one already exists if (sourceResidence == null) { throw new InvalidPacketValueException(); } // removing the reservation does not remove the plot only removes the permanent status sourceResidence.IsTemporary = true; } member.CommunityPlotReservation = operation.Data.Int32Data; AnnounceGuildMemberChange(member); return(new GuildResultInfo(GuildResult.Success)); }
private GuildResultInfo GuildOperationAdditionalInfo(GuildMember member, Player player, ClientGuildOperation operation) { GuildResultInfo GetResult() { if (member.Rank.Index > 0) { return(new GuildResultInfo(GuildResult.RankLacksSufficientPermissions)); } if (!TextFilterManager.Instance.IsTextValid(operation.TextValue) || !TextFilterManager.Instance.IsTextValid(operation.TextValue, UserText.GuildName)) { return(new GuildResultInfo(GuildResult.InvalidGuildInfo)); } return(new GuildResultInfo(GuildResult.Success)); } GuildResultInfo result = GetResult(); if (result.Result == GuildResult.Success) { AdditionalInfo = operation.TextValue; SendToOnlineUsers(new ServerGuildInfoMessageUpdate { RealmId = WorldServer.RealmId, GuildId = Id, AdditionalInfo = AdditionalInfo }); } return(result); }
private GuildResultInfo GuildOperationRankRename(GuildMember member, Player player, ClientGuildOperation operation) { GuildRank rank = null; GuildResultInfo GetResult() { if (!member.Rank.HasPermission(GuildRankPermission.RenameRank)) { return(new GuildResultInfo(GuildResult.RankLacksRankRenamePermission)); } rank = GetRank((byte)operation.Rank); if (rank == null) { return(new GuildResultInfo(GuildResult.InvalidRank, operation.Rank, operation.TextValue)); } if (member.Rank.Index >= operation.Rank) { return(new GuildResultInfo(GuildResult.CanOnlyModifyLowerRanks)); } if (RankExists(operation.TextValue)) { return(new GuildResultInfo(GuildResult.DuplicateRankName, referenceString: operation.TextValue)); } if (!TextFilterManager.Instance.IsTextValid(operation.TextValue) || !TextFilterManager.Instance.IsTextValid(operation.TextValue, UserText.GuildRankName)) { return(new GuildResultInfo(GuildResult.InvalidRankName, referenceString: operation.TextValue)); } return(new GuildResultInfo(GuildResult.Success)); } GuildResultInfo info = GetResult(); if (info.Result == GuildResult.Success) { rank.Name = operation.TextValue; AnnounceGuildRankChange(); AnnounceGuildResult(GuildResult.RankRenamed, operation.Rank, operation.TextValue); } return(info); }
private GuildResultInfo GuildOperationMessageOfTheDay(GuildMember member, Player player, ClientGuildOperation operation) { GuildResultInfo GetResult() { if (!member.Rank.HasPermission(GuildRankPermission.MessageOfTheDay)) { return(new GuildResultInfo(GuildResult.RankLacksSufficientPermissions)); } if (!TextFilterManager.Instance.IsTextValid(operation.TextValue) || !TextFilterManager.Instance.IsTextValid(operation.TextValue, UserText.GuildMessageOfTheDay)) { return(new GuildResultInfo(GuildResult.InvalidMessageOfTheDay)); } return(new GuildResultInfo(GuildResult.Success)); } GuildResultInfo result = GetResult(); if (result.Result == GuildResult.Success) { MessageOfTheDay = operation.TextValue; SendToOnlineUsers(new ServerGuildMotdUpdate { RealmId = WorldServer.RealmId, GuildId = Id, MessageOfTheDay = MessageOfTheDay }); } return(result); }
private GuildResultInfo GuildOperationEditPlayerNote(GuildMember member, Player player, ClientGuildOperation operation) { GuildResultInfo GetResult() { if (!TextFilterManager.Instance.IsTextValid(operation.TextValue) || !TextFilterManager.Instance.IsTextValid(operation.TextValue, UserText.GuildMemberNote)) { return(new GuildResultInfo(GuildResult.InvalidMemberNote)); } return(new GuildResultInfo(GuildResult.Success)); } GuildResultInfo info = GetResult(); if (info.Result == GuildResult.Success) { member.Note = operation.TextValue; AnnounceGuildMemberChange(member); } return(info); }
public static void HandleOperation(WorldSession session, ClientGuildOperation clientGuildOperation) { GlobalGuildManager.Instance.HandleGuildOperation(session.Player, clientGuildOperation); }
private GuildResultInfo GuildOperationTaxUpdate(GuildMember member, Player player, ClientGuildOperation operation) { GuildResultInfo GetResult() { if (member.Rank.Index > 0) { return(new GuildResultInfo(GuildResult.RankLacksSufficientPermissions)); } return(new GuildResultInfo(GuildResult.Success)); } GuildResultInfo result = GetResult(); if (result.Result == GuildResult.Success) { SetTaxes(Convert.ToBoolean(operation.Data)); } return(result); }