Jump to content

Михаил Босс

Membro
  • Content Count

    3
  • Joined

  • Last visited

Community Reputation

0 Normal

About Михаил Босс

  • Rank
    ForeverAlone

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. hello guys i want to add counter to my captcha system ( to work by number of monster ) here is the code package l2f.gameserver.handler.voicecommands.impl.BotReport; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import l2f.gameserver.Config; import l2f.commons.util.Rnd; import l2f.gameserver.data.htm.HtmCache; import l2f.gameserver.model.Player; import l2f.gameserver.network.serverpackets.NpcHtmlMessage; import l2f.gameserver.network.serverpackets.PledgeCrest; import l2f.gameserver.vote.DDSConverter; /** * Class that handles Generating and Sending Captcha Image to the Player */ public class Captcha { private static final char[] CAPTCHA_TEXT_POSSIBILITIES = {'A','B','C','D','E','F','G','H','K','L','M','P','R','S','T','U','W','X','Y','Z'}; private static final int CAPTCHA_WORD_LENGTH = 5; private static final int CAPTCHA_MIN_ID = 1; private static final int CAPTCHA_MAX_ID = 1; /** * Generation new Captcha ID * Generation random Captcha Text * Generating BufferedImage * Sending BufferedImage as PledgeCrest to the Target * Sending HTML Window with Captcha to the player * @param target that will receive image and html Window * @return Captcha Text that player will try to write on Text Box */ public static String sendCaptcha(Player target) { int captchaId = generateRandomCaptchaId(); char[] captchaText = generateCaptchaText(); BufferedImage image = generateCaptcha(captchaText); PledgeCrest packet = new PledgeCrest(captchaId, DDSConverter.convertToDDS(image).array()); target.sendPacket(packet); sendCaptchaWindow(target, captchaId); return String.valueOf(captchaText); } /** * Getting data/html-en/captcha.htm HTML * Replacing %captchaId% and %time% * Sending it as HTML window * @param target Player that will receive html * @param captchaId ID of the image to replace */ private static void sendCaptchaWindow(Player target, int captchaId) { String text = HtmCache.getInstance().getNotNull("captcha.htm", target); text = text.replace("%captchaId%", String.valueOf(captchaId)); text = text.replace("%time%", String.valueOf(Config.CAPTCHA_ANSWER_SECONDS)); NpcHtmlMessage msg = new NpcHtmlMessage(0); msg.setHtml(text); target.sendPacket(msg); } private static char[] generateCaptchaText() { char[] text = new char[5]; for (int i = 0; i < CAPTCHA_WORD_LENGTH; i++) text[i] = CAPTCHA_TEXT_POSSIBILITIES[Rnd.get(CAPTCHA_TEXT_POSSIBILITIES.length)]; return text; } private static int generateRandomCaptchaId() { return Rnd.get(CAPTCHA_MIN_ID, CAPTCHA_MAX_ID); } private static BufferedImage generateCaptcha(char[] text) { Color textColor = new Color(38, 213, 30); Color circleColor = new Color(73, 100, 151); Font textFont = new Font("comic sans ms", Font.BOLD, 24); int charsToPrint = 5; int width = 256; int height = 64; int circlesToDraw = 8; float horizMargin = 20.0f; double rotationRange = 0.7; // this is radians BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D) bufferedImage.getGraphics(); //Draw an oval g.setColor(new Color(30,31,31)); g.fillRect(0, 0, width, height); 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(); float spaceForLetters = -horizMargin * 2.0F + width; float spacePerChar = spaceForLetters / (charsToPrint - 1.0f); for ( int i = 0; i < charsToPrint; i++ ) { char characterToShow = text[i]; // 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(String.valueOf(characterToShow), charX, (charDim - fontMetrics.getAscent()) / 2 + fontMetrics.getAscent()); float x = horizMargin + spacePerChar * i - charDim / 2.0f; int y = (height - charDim) / 2; g.drawImage(charImage, (int) x, y, charDim, charDim, null, null); charGraphics.dispose(); } g.dispose(); return bufferedImage; } } i want to add those lines @Override public void onDeath(Creature actor, Creature killer) { if(Config.ENABLE_CAPTCHA && actor.isMonster() && killer != null && killer != actor && killer.isPlayer()) { Player player = killer.getPlayer(); String customHtm = HtmCache.getInstance().getNotNull("mods/Captcha/ShowCaptchaWindow.htm", player); // +1 to mobcounter addKilledMob(player); boolean doCaptcha = CaptchaImage.getKilledMobs(player.getObjectId()) >= Rnd.get(Config.CAPTCHA_MIN_MONSTERS, Config.CAPTCHA_MAX_MONSTERS) && getCaptchaRequests(player) <= 0; // random monster number. =================================================== i only manage to add the lines in the config.java
  2. Михаил Босс

    captcha

    //Captcha public static boolean CAPTCHA_ALLOW; public static long CAPTCHA_ANSWER_SECONDS; public static long CAPTCHA_JAIL_SECONDS; public static long CAPTCHA_TIME_BETWEEN_TESTED_SECONDS; public static long CAPTCHA_TIME_BETWEEN_REPORTS_SECONDS; public static int CAPTCHA_MIN_LEVEL; public static int CAPTCHA_COUNT; public static String[] CAPTCHA_PUNISHMENT; public static boolean EVENT_RANDOM_TASK; public static long EVENT_RANDOM_TIME; ========================================== //Captcha CAPTCHA_ALLOW = otherSettings.getProperty("AllowCaptcha", true); CAPTCHA_ANSWER_SECONDS = otherSettings.getProperty("CaptchaAnswerTime", 15L); CAPTCHA_JAIL_SECONDS = otherSettings.getProperty("CaptchaJailTime", 1800L); CAPTCHA_TIME_BETWEEN_TESTED_SECONDS = otherSettings.getProperty("CaptchaDelayBetweenCaptchas", 1800L); CAPTCHA_TIME_BETWEEN_REPORTS_SECONDS = otherSettings.getProperty("CaptchaReportDelay", 7200); CAPTCHA_MIN_LEVEL = otherSettings.getProperty("CaptchaMinLevel", 40); CAPTCHA_COUNT = otherSettings.getProperty("CaptchaCount", 2); CAPTCHA_PUNISHMENT = otherSettings.getProperty("CaptchaPunishment", new String[] { "JAIL:90", "JAIL:350", "JAIL:900", "BAN:-100" }); ========================================== captcha.java : package l2f.gameserver.handler.voicecommands.impl.BotReport; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import l2f.gameserver.Config; import l2f.commons.util.Rnd; import l2f.gameserver.data.htm.HtmCache; import l2f.gameserver.model.Player; import l2f.gameserver.network.serverpackets.NpcHtmlMessage; import l2f.gameserver.network.serverpackets.PledgeCrest; import l2f.gameserver.vote.DDSConverter; /** * Class that handles Generating and Sending Captcha Image to the Player */ public class Captcha { private static final char[] CAPTCHA_TEXT_POSSIBILITIES = {'A','B','C','D','E','F','G','H','K','L','M','P','R','S','T','U','W','X','Y','Z'}; private static final int CAPTCHA_WORD_LENGTH = 5; private static final int CAPTCHA_MIN_ID = 1900000000; private static final int CAPTCHA_MAX_ID = 2000000000; /** * Generation new Captcha ID * Generation random Captcha Text * Generating BufferedImage * Sending BufferedImage as PledgeCrest to the Target * Sending HTML Window with Captcha to the player * @param target that will receive image and html Window * @return Captcha Text that player will try to write on Text Box */ public static String sendCaptcha(Player target) { int captchaId = generateRandomCaptchaId(); char[] captchaText = generateCaptchaText(); BufferedImage image = generateCaptcha(captchaText); PledgeCrest packet = new PledgeCrest(captchaId, DDSConverter.convertToDDS(image).array()); target.sendPacket(packet); sendCaptchaWindow(target, captchaId); return String.valueOf(captchaText); } /** * Getting data/html-en/captcha.htm HTML * Replacing %captchaId% and %time% * Sending it as HTML window * @param target Player that will receive html * @param captchaId ID of the image to replace */ private static void sendCaptchaWindow(Player target, int captchaId) { String text = HtmCache.getInstance().getNotNull("captcha.htm", target); text = text.replace("%captchaId%", String.valueOf(captchaId)); text = text.replace("%time%", String.valueOf(Config.CAPTCHA_ANSWER_SECONDS)); NpcHtmlMessage msg = new NpcHtmlMessage(0); msg.setHtml(text); target.sendPacket(msg); } private static char[] generateCaptchaText() { char[] text = new char[5]; for (int i = 0; i < CAPTCHA_WORD_LENGTH; i++) text[i] = CAPTCHA_TEXT_POSSIBILITIES[Rnd.get(CAPTCHA_TEXT_POSSIBILITIES.length)]; return text; } private static int generateRandomCaptchaId() { return Rnd.get(CAPTCHA_MIN_ID, CAPTCHA_MAX_ID); } private static BufferedImage generateCaptcha(char[] text) { Color textColor = new Color(38, 213, 30); Color circleColor = new Color(73, 100, 151); Font textFont = new Font("comic sans ms", Font.BOLD, 24); int charsToPrint = 5; int width = 256; int height = 64; int circlesToDraw = 8; float horizMargin = 20.0f; double rotationRange = 0.7; // this is radians BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D) bufferedImage.getGraphics(); //Draw an oval g.setColor(new Color(30,31,31)); g.fillRect(0, 0, width, height); 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(); float spaceForLetters = -horizMargin * 2.0F + width; float spacePerChar = spaceForLetters / (charsToPrint - 1.0f); for ( int i = 0; i < charsToPrint; i++ ) { char characterToShow = text[i]; // 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(String.valueOf(characterToShow), charX, (charDim - fontMetrics.getAscent()) / 2 + fontMetrics.getAscent()); float x = horizMargin + spacePerChar * i - charDim / 2.0f; int y = (height - charDim) / 2; g.drawImage(charImage, (int) x, y, charDim, charDim, null, null); charGraphics.dispose(); } g.dispose(); return bufferedImage; } } Olá pessoal, tentei saber o que está causando o captcha não está funcionando, mas não tenho idéia aqui em config.java m habilitá-lo através do other.ini também, mas ele simplesmente não funcionará dentro do jogo, nenhuma página aparecerá nada, mesmo eu tentei com l2mythras - l2 ava - l2age todas as fontes têm o mesmo problema, o captcha não funcionará de todo Mesmo que eu verifique o ID do servidor e ele simplesmente não apareça, alguém saberá como fazê-lo funcionar ou me aconselhará usando outro sistema captcha. É fácil adabtá-lo do config.java - captcha.java - other.ini nesta fonte porque não é fácil, neste tipo de pacote de arquivos, agradecer a todos
  3. hey alguém pode compilar este arquivo e uplaod isso para mim?http://www.mediafire.com/file/vohfexc43jlcy1f/L2EvaSource2016.zip/file
×
×
  • Create New...