/// <summary> /// Checks whether the given target exists in requester's guild and whether the given requestMember has needed privs /// Sends result of action to the requester /// </summary> /// <param name="reqChar">requester's character, can be null. If null, sending result is suppressed</param> /// <param name="targetName">target character's name</param> /// <param name="targetGM">target's GuildMember entry is returned through this</param> /// <param name="commandId">executed command. Used for sending result</param> /// <param name="reqPrivs">priviliges required for executing this action</param> /// <param name="canAffectSelf">can this action be executed on self?</param> /// <returns>result of operation</returns> public static GuildResult CheckAction(Character reqChar, string targetName, out GuildMember targetGM, GuildCommandId commandId, GuildPrivileges reqPrivs, bool canAffectSelf) { targetGM = null; GuildResult err; var requester = reqChar.GuildMember; if (requester == null) { err = GuildResult.PLAYER_NOT_IN_GUILD; targetName = string.Empty; } else if ((targetGM = requester.Guild[targetName]) == null) { err = GuildResult.PLAYER_NOT_FOUND; } else if (!canAffectSelf && (requester == targetGM)) { err = GuildResult.PERMISSIONS; } else if (!requester.HasRight(reqPrivs)) { err = GuildResult.PERMISSIONS; targetName = string.Empty; } else { return(GuildResult.SUCCESS); } GuildHandler.SendResult(reqChar.Client, commandId, targetName, err); return(err); }
/// <summary> /// Checks whether the given target exists in requester's guild and whether the given requestMember has needed privs /// Sends result of action to the requester /// </summary> /// <param name="reqChar">requester's character, can be null. If null, sending result is suppressed</param> /// <param name="targetName">target character's name</param> /// <param name="targetGM">target's GuildMember entry is returned through this</param> /// <param name="commandId">executed command. Used for sending result</param> /// <param name="reqPrivs">priviliges required for executing this action</param> /// <param name="canAffectSelf">can this action be executed on self?</param> /// <returns>result of operation</returns> public static GuildResult CheckAction(Character reqChar, string targetName, out GuildMember targetGM, GuildCommandId commandId, GuildPrivileges reqPrivs, bool canAffectSelf) { targetGM = (GuildMember)null; GuildMember guildMember = reqChar.GuildMember; GuildResult resultCode; if (guildMember == null) { resultCode = GuildResult.PLAYER_NOT_IN_GUILD; targetName = string.Empty; } else if ((targetGM = guildMember.Guild[targetName]) == null) { resultCode = GuildResult.PLAYER_NOT_FOUND; } else if (!canAffectSelf && guildMember == targetGM) { resultCode = GuildResult.PERMISSIONS; } else { if (guildMember.HasRight(reqPrivs)) { return(GuildResult.SUCCESS); } resultCode = GuildResult.PERMISSIONS; targetName = string.Empty; } GuildHandler.SendResult((IPacketReceiver)reqChar.Client, commandId, targetName, resultCode); return(resultCode); }
/// <summary> /// Checks if given character has necessary priviliges /// CheckInGuild call is done automatically /// </summary> /// <param name="character">character to check. May be null</param> /// <param name="commandId">executed command (used for sending result)</param> /// <param name="reqPrivs">required privileges</param> /// <returns>The Character's guild if the character has required privileges within the guild, otherwise null</returns> public static Guild CheckPrivs(Character character, GuildCommandId commandId, GuildPrivileges reqPrivs) { GuildMember guildMember = character.GuildMember; if (guildMember == null) { GuildHandler.SendResult((IPacketReceiver)character, commandId, GuildResult.PLAYER_NOT_IN_GUILD); return((Guild)null); } if (guildMember.HasRight(reqPrivs)) { return(guildMember.Guild); } Character character1 = guildMember.Character; if (character1 != null) { GuildHandler.SendResult((IPacketReceiver)character1, commandId, GuildResult.PERMISSIONS); } return((Guild)null); }
/// <summary> /// Checks if given character has necessary priviliges /// CheckInGuild call is done automatically /// </summary> /// <param name="character">character to check. May be null</param> /// <param name="commandId">executed command (used for sending result)</param> /// <param name="reqPrivs">required privileges</param> /// <returns>The Character's guild if the character has required privileges within the guild, otherwise null</returns> public static Guild CheckPrivs(Character character, GuildCommandId commandId, GuildPrivileges reqPrivs) { var member = character.GuildMember; if (member == null) { GuildHandler.SendResult(character, commandId, GuildResult.PLAYER_NOT_IN_GUILD); return(null); } else { if (!member.HasRight(reqPrivs)) { var requester = member.Character; if (requester != null) { GuildHandler.SendResult(requester, commandId, GuildResult.PERMISSIONS); } return(null); } } return(member.Guild); }
/// <summary> /// Checks whether a guild member may make another guild member the guild leader /// </summary> /// <param name="reqChar">requester's character, can be null. If null, sending result is suppressed</param> /// <param name="targetChar">target's character, can be null</param> /// <param name="targetName">target character's name</param> /// <returns>result of operation</returns> public static GuildResult CheckIsLeader(Character reqChar, Character targetChar, GuildCommandId cmd, string targetName) { GuildMember guildMember1 = reqChar.GuildMember; GuildResult resultCode; if (guildMember1 == null) { resultCode = GuildResult.PLAYER_NOT_IN_GUILD; } else if (targetChar == null) { resultCode = GuildResult.PLAYER_NOT_FOUND; } else { GuildMember guildMember2; if ((guildMember2 = targetChar.GuildMember) == null || guildMember2.Guild != guildMember1.Guild) { resultCode = GuildResult.PLAYER_NOT_IN_GUILD; } else if (guildMember1 == guildMember2) { resultCode = GuildResult.PERMISSIONS; targetName = string.Empty; } else { if (guildMember1.IsLeader) { return(GuildResult.SUCCESS); } resultCode = GuildResult.PERMISSIONS; targetName = string.Empty; } } GuildHandler.SendResult((IPacketReceiver)reqChar, cmd, targetName, resultCode); return(resultCode); }
/// <summary> /// Sends result of actions connected with guilds /// </summary> /// <param name="client">the client to send to</param> /// <param name="commandId">command executed</param> /// <param name="resultCode">The <see cref="GuildResult"/> result code</param> public static void SendResult(IPacketReceiver client, GuildCommandId commandId, GuildResult resultCode) { SendResult(client, commandId, string.Empty, resultCode); }
/// <summary> /// Sends result of actions connected with guilds /// </summary> /// <param name="client">the client to send to</param> /// <param name="commandId">command executed</param> /// <param name="name">name of player event has happened to</param> /// <param name="resultCode">The <see cref="GuildResult"/> result code</param> public static void SendResult(IPacketReceiver client, GuildCommandId commandId, string name, GuildResult resultCode) { // TODO: change params to enums using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_GUILD_COMMAND_RESULT)) { packet.WriteUInt((uint)commandId); packet.WriteCString(name); packet.WriteUInt((uint)resultCode); client.Send(packet); } }
//public static bool CheckMemberInGuild(GuildMember requester, GuildMember target) //{ // if (requester == null) // return false; // if (requester.Guild != target.Guild) // { // Guild.SendResult(requester.Character.Client, GuildCommand.CREATE, target.Name, // GuildResult.PLAYER_NOT_IN_GUILD); // return false; // } // return true; //} /// <summary> /// Checks whether a guild member may make another guild member the guild leader /// </summary> /// <param name="reqChar">requester's character, can be null. If null, sending result is suppressed</param> /// <param name="targetChar">target's character, can be null</param> /// <param name="targetName">target character's name</param> /// <returns>result of operation</returns> public static GuildResult CheckIsLeader(Character reqChar, Character targetChar, GuildCommandId cmd, string targetName) { GuildResult err; GuildMember requester = reqChar.GuildMember, target; if (requester == null) { err = GuildResult.PLAYER_NOT_IN_GUILD; } else if (targetChar == null) { err = GuildResult.PLAYER_NOT_FOUND; } else if ((target = targetChar.GuildMember) == null || target.Guild != requester.Guild) { err = GuildResult.PLAYER_NOT_IN_GUILD; } else if (requester == target) { err = GuildResult.PERMISSIONS; targetName = string.Empty; } else if (!requester.IsLeader) { err = GuildResult.PERMISSIONS; targetName = string.Empty; } else { return(GuildResult.SUCCESS); } GuildHandler.SendResult(reqChar, cmd, targetName, err); return(err); }