i was trying to add a feature to count mobs to my captcha system from like two months but i did not succed
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
*/publicclassCaptcha{privatestatic 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'};privatestatic final int CAPTCHA_WORD_LENGTH =5;privatestatic final int CAPTCHA_MIN_ID =1;privatestatic 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
*/publicstaticString sendCaptcha(Player target){int captchaId = generateRandomCaptchaId();char[] captchaText = generateCaptchaText();BufferedImage image = generateCaptcha(captchaText);PledgeCrest packet =newPledgeCrest(captchaId,DDSConverter.convertToDDS(image).array());
target.sendPacket(packet);
sendCaptchaWindow(target, captchaId);returnString.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
*/privatestaticvoid 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 =newNpcHtmlMessage(0);
msg.setHtml(text);
target.sendPacket(msg);}privatestaticchar[] generateCaptchaText(){char[] text =newchar[5];for(int i =0; i < CAPTCHA_WORD_LENGTH; i++)
text[i]= CAPTCHA_TEXT_POSSIBILITIES[Rnd.get(CAPTCHA_TEXT_POSSIBILITIES.length)];return text;}privatestaticint generateRandomCaptchaId(){returnRnd.get(CAPTCHA_MIN_ID, CAPTCHA_MAX_ID);}privatestaticBufferedImage generateCaptcha(char[] text){Color textColor =newColor(38,213,30);Color circleColor =newColor(73,100,151);Font textFont =newFont("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 radiansBufferedImage bufferedImage =newBufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics2D g =(Graphics2D) bufferedImage.getGraphics();//Draw an oval
g.setColor(newColor(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 independentlyint charWidth = fontMetrics.charWidth(characterToShow);int charDim =Math.max(maxAdvance, fontHeight);int halfCharDim = charDim /2;BufferedImage charImage =newBufferedImage(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;}}
my goal is to add those lines in the code
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.
all i manage to do i just adding the lines in the config.java
You can post now and register later.
If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.
=
Protocol 140 corresponds to "Salvation - First Chapter," while protocol 152 corresponds to "Salvation: The Gathering / Orfen," which is a later update in the Salvation series. So i prefer the latest since many things works really better there.
Question
HorrorSlyer
hello guys
i was trying to add a feature to count mobs to my captcha system from like two months but i did not succed
my goal is to add those lines in the code
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.
all i manage to do i just adding the lines in the config.java
0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.