public static bool HandleApplyJoin(Models.Entities.Player player, Models.Packets.Guilds.GuildPacket packet) { if (player.Battle != null) { return(true); } if (packet.Data == player.ClientId) { return(false); } if (player.Guild != null) { return(false); } Models.Maps.IMapObject mapObject = null; if (player.ApplyGuildMemberClientId == 0) { if (player.GetFromScreen(packet.Data, out mapObject)) { var requestPlayer = mapObject as Models.Entities.Player; if (requestPlayer != null) { if (requestPlayer.Guild != null && ( requestPlayer.GuildMember.Rank == Enums.GuildRank.GuildLeader || requestPlayer.GuildMember.Rank == Enums.GuildRank.DeputyLeader )) { requestPlayer.ApplyGuildMemberClientId = player.ClientId; requestPlayer.ClientSocket.Send(new Models.Packets.Guilds.GuildPacket { Action = Enums.GuildAction.ApplyJoin, Data = player.ClientId }); } } } return(true); } if (player.ApplyGuildMemberClientId != packet.Data) { return(true); } player.ApplyGuildMemberClientId = 0; if (player.GetFromScreen(packet.Data, out mapObject)) { var invitePlayer = mapObject as Models.Entities.Player; if (invitePlayer != null) { if (invitePlayer.Guild != null && ( invitePlayer.GuildMember.Rank == Enums.GuildRank.GuildLeader || invitePlayer.GuildMember.Rank == Enums.GuildRank.DeputyLeader )) { invitePlayer.Guild.AddMember(player, Enums.GuildRank.Member); } } } return(true); }
/// <summary> /// Validates a magic attack. /// </summary> /// <param name="attacker">The attacker.</param> /// <param name="packet">The packet.</param> /// <param name="target">The target.</param> /// <returns>The status of the validation. (0 = success.)</returns> private static int ValidateMagicAttack(AttackableEntityController attacker, Models.Packets.Entities.InteractionPacket packet, out AttackableEntityController target) { target = null; if (packet == null) { return(1); } if (!attacker.AttackableEntity.Alive) { return(2); } if (!Tools.RangeTools.ValidDistance(attacker.MapObject.X, attacker.MapObject.Y, packet.X, packet.Y)) { return(3); } Models.Maps.IMapObject targetMapObject = null; bool requiresTarget = false; if (packet.TargetClientId > 0) { if (!attacker.GetFromScreen(packet.TargetClientId, out targetMapObject) && packet.TargetClientId != attacker.AttackableEntity.ClientId) { return(4); } else { requiresTarget = packet.TargetClientId != attacker.AttackableEntity.ClientId; } } target = targetMapObject as AttackableEntityController; if (target != null) { var targetPlayer = target as Player; if (targetPlayer != null) { if (!targetPlayer.LoggedIn) { return(5); } if (DateTime.UtcNow < targetPlayer.LoginProtectionEndTime) { return(5); } if (DateTime.UtcNow < targetPlayer.ReviveProtectionEndTime) { return(6); } } if (!Tools.RangeTools.ValidDistance(attacker.MapObject.X, attacker.MapObject.Y, target.MapObject.X, target.MapObject.Y)) { return(7); } if (!target.AttackableEntity.Alive && packet.MagicType != 1100 && packet.MagicType != 1050) { return(8); } } else if (requiresTarget) { return(10); } return(0); }