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.
hello everyone!
I am wanting to save the files (Ini. - Data - ) of the EP5 Client: Salvation... But they generate the error "corrupt files"... I tried several versions of L2FileEditor without good results.
I need help! Thank you!
Opening December 6th at 19:00 (GMT +3)!
Open Beta Test from November 30th!
https://l2soe.com/
🌟 Introducing L2 Saga of Eternia: A Revolution in Lineage 2 High Five! 🌟
Dear Lineage 2 enthusiasts,
Prepare to witness the future of private servers! L2 Saga of Eternia is not just another High Five project—it’s a game-changing experience designed to compete with the giants of the Lineage 2 private server scene. Built for the community, by the community, we’re here to raise the bar in quality, innovation, and longevity.
What Sets Us Apart?
💎 No Wipes, Ever
Say goodbye to the fear of losing your progress. Our server is built to last and will never close. Stability and consistency are our promises to you.
⚔️ Weekly New Content
Our dedicated development team ensures fresh challenges, events, and updates every week. From custom quests to exclusive features, there will always be something exciting to explore.
💰 No Pay-to-Win
Skill and strategy matter most here. Enjoy a balanced gameplay environment where your achievements come from effort, not your wallet.
🌍 A Massive Community
With 2000+ players expected, join a vibrant and active community of like-minded adventurers ready to conquer the world of Aden.
🏆 Fair and Competitive Gameplay
Our systems are designed to promote healthy competition while avoiding abusive mechanics and exploits.
🔧 Professional Development
From advanced bug fixes to carefully curated content, we pride ourselves on smooth performance, no lag, and unparalleled server quality.
Key Features
Chronicle: High Five with unique interface
Rate: Dynamic x10 rates
Class Balance: Carefully fine-tuned for a fair experience
PvP Focused: PvP Ranking & aura display effect for 3 Top PvPers every week
Custom Events: Seasonal and permanent events to keep you engaged
Additional Features:
Custom Endgame Content: Introduce unique dungeons, raids, or zones unavailable in other servers.
Player-Driven Economy: Implement a strong market system and avoid overinflated drops or rewards.
Epic Siege Battles: Announce special large-scale sieges and PvP events.
Incentives for Streamers and Clans: Attract influencers and big clans to boost server publicity.
Roadmap Transparency: Share a public roadmap of planned updates to build trust and excitemen
Here you can read all the features: https://l2soe.com/features
Video preview:
Join the Revolution!
This is your chance to be part of something legendary. L2 Saga of Eternia is not just a server; it’s a movement to redefine what Lineage 2 can be. Whether you’re a seasoned veteran or a newcomer to the world of Aden, we invite you to experience Lineage 2 at its finest.
Official Launch Date: December 6th 2024
Website: https://l2soe.com/
Facebook: https://www.facebook.com/l2soe
Discord: https://discord.com/invite/l2eternia
Let’s build the ultimate Lineage 2 experience together. See you in-game! 🎮
DISCORD :
utchiha_market
telegram :
https://t.me/utchiha_market
SELLIX STORE :
https://utchihamkt.mysellix.io/
Join our server for more products :
https://discord.gg/hood-services
https://campsite.bio/utchihaamkt
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.