pipiou21 Posted May 19, 2011 Author Posted May 19, 2011 Nice Share, I will test. First of all, you are spammer, but second, are you developer of l2spartan project?
mfausb Posted May 21, 2011 Posted May 21, 2011 A fixed number of killed mobs to trigger this can be abused, use random numbers instead.
vampir Posted May 21, 2011 Posted May 21, 2011 A fixed number of killed mobs to trigger this can be abused, use random numbers instead. gz nice share btw :)
MoDuL Posted May 23, 2011 Posted May 23, 2011 I really don't understand why you had to hide that for 150 posts... :S
pipiou21 Posted May 23, 2011 Author Posted May 23, 2011 I really don't understand why you had to hide that for 150 posts... :S Because i made it and i have the rights to do it.
disorder25 Posted May 23, 2011 Posted May 23, 2011 Because i made it and i have the rights to do it. Pipiou21 you haven't ask my question on my last post before this. http://maxcheaters.com/forum/index.php?topic=207620.msg1779866#msg1779866 Thank you
pipiou21 Posted May 23, 2011 Author Posted May 23, 2011 Great share it is working very good, only problem I see is the UPPERCASE letters, is that anyway to make it uppercase or lowercase or even mixed. It was a lot of players in jail today in my server, most of then for mistakes on the typing, they used lowercase instead. Lot of players got pissed off. Also: When I used a Dreadnought as a gm and it killed lots of mobs at the same time the window keep changing the code and then sometimes it stop with no code at all. I don't know if a regular char will be able to reproduce that but maybe it they kill 49 mobs and then kill 3 more in one hit (50, 51 and 52) it might happen. Let me know if the fix above will fix that problem. Im sorry coz i havent answered, im also using aoe farming on my pack, 10 mobs per rush impact, and yes it getting more than 50 mobs (for example), but it shows to player only one html (atleast the last one), you can make it with tries if you want to, for example to have 3 times to write it wrong and then punish him, about the UPPERCASE and lowercase letters, check this, it is on L2Attackable after my patch :)! + // Suggestions ---------------------------------------------------------------------- + // i removed 1 and l and i because there are confusing to users... + // Z, z, and N also get confusing when rotated + // 0, O, and o are also confusing... + // lowercase G looks a lot like a 9 so i killed it + // this should ideally be done for every language... + // i like controlling the characters though because it helps prevent confusion + // So recommended chars are: + // String elegibleChars = "ABCDEFGHJKLMPQRSTUVWXYabcdefhjkmnpqrstuvwxy23456789"; + // Suggestions ---------------------------------------------------------------------- + String elegibleChars = "ABCDEFGHJKLMPQRSTUVWXYZ"; + char[] chars = elegibleChars.toCharArray(); + Just change ""ABCDEFGHJKLMPQRSTUVWXYZ" to the letters you wanna. ("ABCDEFGHJKLMPQRSTUVWXYabcdefhjkmnpqrstuvwxy23456789" are recommented, read the comments, there is reasoning.) Edit: If you want to be sure about html messages and the Mobkill-counter make a check with an output on console :), and check.
mfausb Posted May 25, 2011 Posted May 25, 2011 Well first I would suggest the following for the generation of the captcha: public static BufferedImage generateCaptcha() { final int width = 256; final int height = 64; final BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); final Graphics2D g2d = bufferedImage.createGraphics(); final Font textFont = new Font("verdana", Font.BOLD, 36); final Font textFontUpper = new Font("verdana", Font.BOLD | Font.ITALIC, 36); RenderingHints renderingHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); renderingHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHints(renderingHints); Color textColor = new Color(98, 213, 43); Color circleColor = new Color(98, 213, 43); int charsToPrint = 5; int circlesToDraw = 8; float horizMargin = 20.0f; double rotationRange = 0.7; // this is radians Graphics2D g = (Graphics2D) bufferedImage.getGraphics(); //Draw an oval g.setColor(new Color(30,31,31)); g.fillRect(0, 0, width, height); // lets make some noisey circles g.setColor(circleColor); for (int i=0; i<circlesToDraw; i++) { int circleRadius = (int) (Math.random() * height / 2.0); int circleX = (int) (Math.random() * width - circleRadius); int circleY = (int) (Math.random() * height - circleRadius); g.drawOval(circleX, circleY, circleRadius * 2, circleRadius * 2); } g.setColor(textColor); g.setFont(textFont); FontMetrics fontMetrics = g.getFontMetrics(); int maxAdvance = fontMetrics.getMaxAdvance(); int fontHeight = fontMetrics.getHeight(); // Suggestions ---------------------------------------------------------------------- // i removed 1 and l and i because there are confusing to users... // Z, z, and N also get confusing when rotated // 0, O, and o are also confusing... // lowercase G looks a lot like a 9 so i killed it // this should ideally be done for every language... // i like controlling the characters though because it helps prevent confusion // So recommended chars are: // String elegibleChars = "ABCDEFGHJKLMPQRSTUVWXYabcdefhjkmnpqrstuvwxy23456789"; // Suggestions ---------------------------------------------------------------------- String elegibleChars = "abcdefghjijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789"; char[] chars = elegibleChars.toCharArray(); float spaceForLetters = -horizMargin * 2 + width; float spacePerChar = spaceForLetters / (charsToPrint - 1.0f); for (int i=0; i<charsToPrint; i++) { double randomValue = Math.random(); int randomIndex = (int) Math.round(randomValue * (chars.length - 1)); char characterToShow = chars[randomIndex]; finalString.append(characterToShow); // this is a separate canvas used for the character so that // we can rotate it independently int charWidth = fontMetrics.charWidth(characterToShow); int charDim = Math.max(maxAdvance, fontHeight); int halfCharDim = (charDim / 2); BufferedImage charImage = new BufferedImage(charDim, charDim, BufferedImage.TYPE_INT_ARGB); Graphics2D charGraphics = charImage.createGraphics(); charGraphics.translate(halfCharDim, halfCharDim); double angle = (Math.random() - 0.5) * rotationRange; charGraphics.transform(AffineTransform.getRotateInstance(angle)); charGraphics.translate(-halfCharDim,-halfCharDim); charGraphics.setColor(textColor); charGraphics.setFont(textFont); int charX = (int) (0.5 * charDim - 0.5 * charWidth); charGraphics.drawString("" + characterToShow, charX, ((charDim - fontMetrics.getAscent()) / 2 + fontMetrics.getAscent())); float x = horizMargin + spacePerChar * (i) - charDim / 2.0f; int y = ((height - charDim) / 2); if(Character.isDigit(chars[i]) || Character.isLowerCase(chars[i])) g2d.setFont(textFont); else g2d.setFont(textFontUpper); g.drawImage(charImage, (int) x, y, charDim, charDim, null, null); charGraphics.dispose(); } g.dispose(); return bufferedImage; } And next the following to load it: final int sId = Config.SERVER_ID; int imgId = IdFactory.getInstance().getNextId(); try { //File captcha = new File("data/captcha/captcha.png"); ByteArrayOutputStream bts = new ByteArrayOutputStream(); ImageIO.write(generateCaptcha(), "png", bts); //ImageIO.write(generateCaptcha(), "png", captcha); byte[] buffer = bts.toByteArray(); ByteArrayInputStream bis = new ByteArrayInputStream (buffer, 0, buffer.length); PledgeCrest packet = new PledgeCrest(imgId, DDSConverter.convertToDDS(bis).array()); playerInstance.sendPacket(packet); } catch (Exception e) { ...
pipiou21 Posted May 26, 2011 Author Posted May 26, 2011 Well first I would suggest the following for the generation of the captcha: public static BufferedImage generateCaptcha() { final int width = 256; final int height = 64; final BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); final Graphics2D g2d = bufferedImage.createGraphics(); final Font textFont = new Font("verdana", Font.BOLD, 36); final Font textFontUpper = new Font("verdana", Font.BOLD | Font.ITALIC, 36); RenderingHints renderingHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); renderingHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHints(renderingHints); Color textColor = new Color(98, 213, 43); Color circleColor = new Color(98, 213, 43); int charsToPrint = 5; int circlesToDraw = 8; float horizMargin = 20.0f; double rotationRange = 0.7; // this is radians Graphics2D g = (Graphics2D) bufferedImage.getGraphics(); //Draw an oval g.setColor(new Color(30,31,31)); g.fillRect(0, 0, width, height); // lets make some noisey circles g.setColor(circleColor); for (int i=0; i<circlesToDraw; i++) { int circleRadius = (int) (Math.random() * height / 2.0); int circleX = (int) (Math.random() * width - circleRadius); int circleY = (int) (Math.random() * height - circleRadius); g.drawOval(circleX, circleY, circleRadius * 2, circleRadius * 2); } g.setColor(textColor); g.setFont(textFont); FontMetrics fontMetrics = g.getFontMetrics(); int maxAdvance = fontMetrics.getMaxAdvance(); int fontHeight = fontMetrics.getHeight(); // Suggestions ---------------------------------------------------------------------- // i removed 1 and l and i because there are confusing to users... // Z, z, and N also get confusing when rotated // 0, O, and o are also confusing... // lowercase G looks a lot like a 9 so i killed it // this should ideally be done for every language... // i like controlling the characters though because it helps prevent confusion // So recommended chars are: // String elegibleChars = "ABCDEFGHJKLMPQRSTUVWXYabcdefhjkmnpqrstuvwxy23456789"; // Suggestions ---------------------------------------------------------------------- String elegibleChars = "abcdefghjijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789"; char[] chars = elegibleChars.toCharArray(); float spaceForLetters = -horizMargin * 2 + width; float spacePerChar = spaceForLetters / (charsToPrint - 1.0f); for (int i=0; i<charsToPrint; i++) { double randomValue = Math.random(); int randomIndex = (int) Math.round(randomValue * (chars.length - 1)); char characterToShow = chars[randomIndex]; finalString.append(characterToShow); // this is a separate canvas used for the character so that // we can rotate it independently int charWidth = fontMetrics.charWidth(characterToShow); int charDim = Math.max(maxAdvance, fontHeight); int halfCharDim = (charDim / 2); BufferedImage charImage = new BufferedImage(charDim, charDim, BufferedImage.TYPE_INT_ARGB); Graphics2D charGraphics = charImage.createGraphics(); charGraphics.translate(halfCharDim, halfCharDim); double angle = (Math.random() - 0.5) * rotationRange; charGraphics.transform(AffineTransform.getRotateInstance(angle)); charGraphics.translate(-halfCharDim,-halfCharDim); charGraphics.setColor(textColor); charGraphics.setFont(textFont); int charX = (int) (0.5 * charDim - 0.5 * charWidth); charGraphics.drawString("" + characterToShow, charX, ((charDim - fontMetrics.getAscent()) / 2 + fontMetrics.getAscent())); float x = horizMargin + spacePerChar * (i) - charDim / 2.0f; int y = ((height - charDim) / 2); if(Character.isDigit(chars[i]) || Character.isLowerCase(chars[i])) g2d.setFont(textFont); else g2d.setFont(textFontUpper); g.drawImage(charImage, (int) x, y, charDim, charDim, null, null); charGraphics.dispose(); } g.dispose(); return bufferedImage; } And next the following to load it: final int sId = Config.SERVER_ID; int imgId = IdFactory.getInstance().getNextId(); try { //File captcha = new File("data/captcha/captcha.png"); ByteArrayOutputStream bts = new ByteArrayOutputStream(); ImageIO.write(generateCaptcha(), "png", bts); //ImageIO.write(generateCaptcha(), "png", captcha); byte[] buffer = bts.toByteArray(); ByteArrayInputStream bis = new ByteArrayInputStream (buffer, 0, buffer.length); PledgeCrest packet = new PledgeCrest(imgId, DDSConverter.convertToDDS(bis).array()); playerInstance.sendPacket(packet); } catch (Exception e) { ... Can you please give us reasoning? As i can see you have changed the font and added all letters/numbers....
MadΜax Posted May 27, 2011 Posted May 27, 2011 awesome good job man! Question: it is possible if i whant to disable jail and just the character to stay in freezing mode or to disable the if you write also wrong you get jail for 1 minute?
pipiou21 Posted May 28, 2011 Author Posted May 28, 2011 awesome good job man! Question: it is possible if i whant to disable jail and just the character to stay in freezing mode or to disable the if you write also wrong you get jail for 1 minute? Well, yes, its simple, everywhere you can see this + activeChar.setPunishLevel(L2PcInstance.PunishLevel.JAIL, 1); ... Just delete it! This is the "method" that jails the player.
Recommended Posts