Jump to content

Recommended Posts

Posted

As the title say i will share with you one password manager for Acis 370. Credits: Sweets( Ive just made the imports right  and the necessary changes in case that someone didnt know and have problem).

 

Go to : net.sf.l2j.gameserver.model.actor.instance and create a new class with name:  L2PasswordInstance

 

/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */
package net.sf.l2j.gameserver.model.actor.instance;
 
import java.security.MessageDigest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Base64;
import java.util.StringTokenizer;
 
import net.sf.l2j.commons.concurrent.ThreadPool;
 
import net.sf.l2j.L2DatabaseFactory;
import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
 
/**
 * @author SweeTs
 */
public class L2PasswordInstance extends Folk
{
    public L2PasswordInstance(int objectId, NpcTemplate template)
    {
        super(objectId, template);
    }
   
    @Override
    public void onBypassFeedback(Player player, String command)
    {
        if (command.startsWith("change_password"))
        {
            StringTokenizer st = new StringTokenizer(command);
            st.nextToken();
           
            String newPass = "";
            String repeatNewPass = "";
           
            try
            {
                if (st.hasMoreTokens())
                {
                    newPass = st.nextToken();
                    repeatNewPass = st.nextToken();
                }
            }
            catch (Exception e)
            {
                player.sendMessage("Please fill all the blanks before requesting for a password change.");
                return;
            }
           
            if (!conditions(newPass, repeatNewPass, player))
                return;
           
            changePassword(newPass, repeatNewPass, player);
        }
    }
   
    private static boolean conditions(String newPass, String repeatNewPass, Player player)
    {
        if (newPass.length() < 3)
        {
            player.sendMessage("The new password is too short!");
            return false;
        }
        else if (newPass.length() > 45)
        {
            player.sendMessage("The new password is too long!");
            return false;
        }
        else if (!newPass.equals(repeatNewPass))
        {
            player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PASSWORD_ENTERED_INCORRECT2));
            return false;
        }
       
        return true;
    }
   
    @Override
    public void showChatWindow(Player activeChar)
    {
        final NpcHtmlMessage html = new NpcHtmlMessage(0);
        final StringBuilder sb = new StringBuilder();
       
        sb.append("<html><title>Account Manager</title>");
        sb.append("<body><center>");
        sb.append("<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>");
        sb.append("New password: <edit var=\"new\" width=100 height=15><br>");
        sb.append("Repeat: <edit var=\"repeatnew\" width=100 height=15><br>");
        sb.append("<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>");
        sb.append("<a action=\"bypass -h npc_%objectId%_change_password $new $repeatnew\">Change password</a>");
        sb.append("</center></body></html>");
       
        html.setHtml(sb.toString());
        html.replace("%objectId%", getObjectId());
        activeChar.sendPacket(html);
    }
   
    private static void changePassword(String newPass, String repeatNewPass, Player activeChar)
    {
        try (Connection con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement ps = con.prepareStatement("UPDATE accounts SET password=? WHERE login=?"))
        {
            byte[] newPassword = MessageDigest.getInstance("SHA").digest(newPass.getBytes("UTF-8"));
           
            ps.setString(1, Base64.getEncoder().encodeToString(newPassword));
            ps.setString(2, activeChar.getAccountName());
            ps.executeUpdate();
           
            activeChar.sendMessage("Congratulations! Your password has been changed. You will now be disconnected for security reasons. Please login again.");
            ThreadPool.schedule(() -> activeChar.logout(false), 3000);
        }
        catch (Exception e)
        {
            _log.warning("There was an error while updating account:" + e);
        }
    }
}

 After you are passing this the only thing that you have to do is create a new npc with type: L2Password.

 

HAVE A NICE DAY GUYS :)

 

 

 

 

  • Like 1
Posted
7 hours ago, thepsolartek said:

 Credits: Sweets

 

 

 

1 hour ago, Rootware said:

Forgot about credits and allowing rights for sharing.

 


/**
 * @author SweeTs
 */

 

he did actually

Posted

As you can see in the start of this topic i ve already told that the code didnt belong to me but Sweets. The only thing i did is to make the imports correct for acis 370 and do the necessary changes where the code has error. I did that for members that didnt know how to use eclipse very well and what changes are done in acis 370. 

  • 1 month later...
  • 3 months later...
Posted
2 hours ago, sacrifice said:

what is folk

Normally it's L2NpcInstance. Adjust to your pack - simply check another instance file, see what does it extends.

Posted

I compile with this code but when I use instance L2Password on a NPC I dont have interface in html windows

 

 

/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */
package com.l2jfree.gameserver.gameobjects.instance;
 
import java.security.MessageDigest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Base64;
import java.util.StringTokenizer;
 
import com.l2jfree.gameserver.ThreadPoolManager;
import com.l2jfree.gameserver.gameobjects.L2Npc;
import com.l2jfree.gameserver.gameobjects.L2Player;
import com.l2jfree.L2DatabaseFactory;
import com.l2jfree.gameserver.gameobjects.templates.L2NpcTemplate;
import com.l2jfree.gameserver.network.SystemMessageId;
import com.l2jfree.gameserver.network.packets.server.NpcHtmlMessage;
import com.l2jfree.gameserver.network.SystemMessageId;
 

 
/**
 * @author SweeTs
 */
public class L2PasswordInstance extends L2Npc
{
    public L2PasswordInstance(int objectId, L2NpcTemplate template)
    {
        super(objectId, template);
    }
   
    @Override
    public void onBypassFeedback(L2Player player, String command)
    {
        if (command.startsWith("change_password"))
        {
            StringTokenizer st = new StringTokenizer(command);
            st.nextToken();
           
            String newPass = "";
            String repeatNewPass = "";
           
            try
            {
                if (st.hasMoreTokens())
                {
                    newPass = st.nextToken();
                    repeatNewPass = st.nextToken();
                }
            }
            catch (Exception e)
            {
                player.sendMessage("Please fill all the blanks before requesting for a password change.");
                return;
            }
           
            if (!conditions(newPass, repeatNewPass, player))
                return;
           
            changePassword(newPass, repeatNewPass, player);
        }
    }
   
    private static boolean conditions(String newPass, String repeatNewPass, L2Player player)
    {
        if (newPass.length() < 3)
        {
            player.sendMessage("The new password is too short!");
            return false;
        }
        else if (newPass.length() > 45)
        {
            player.sendMessage("The new password is too long!");
            return false;
        }
        else if (!newPass.equals(repeatNewPass))
        {
			player.sendPacket(SystemMessageId.REGISTRATION_PERIOD_OVER);
            return false;
        }
       
        return true;
    }
   
    @Override
    public void showChatWindow(L2Player activeChar)
    {
        final NpcHtmlMessage html = new NpcHtmlMessage(0);
        final StringBuilder sb = new StringBuilder();
       
        sb.append("<html><title>Account Manager</title>");
        sb.append("<body><center>");
        sb.append("<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>");
        sb.append("New password: <edit var=\"new\" width=100 height=15><br>");
        sb.append("Repeat: <edit var=\"repeatnew\" width=100 height=15><br>");
        sb.append("<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>");
        sb.append("<a action=\"bypass -h npc_%objectId%_change_password $new $repeatnew\">Change password</a>");
        sb.append("</center></body></html>");
       
        html.setHtml(sb.toString());
        html.replace("%objectId%", getObjectId());
        activeChar.sendPacket(html);
    }
   
    private static void changePassword(String newPass, String repeatNewPass, L2Player activeChar)
    {
        try (Connection con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement ps = con.prepareStatement("UPDATE accounts SET password=? WHERE login=?"))
        {
            byte[] newPassword = MessageDigest.getInstance("SHA").digest(newPass.getBytes("UTF-8"));
           
            ps.setString(1, Base64.getEncoder().encodeToString(newPassword));
            ps.setString(2, activeChar.getAccountName());
            ps.executeUpdate();
           
            activeChar.sendMessage("Congratulations! Your password has been changed. You will now be disconnected for security reasons. Please login again.");
//            ThreadPool.schedule(() -> activeChar.logout(false), 3000);
        }
        catch (Exception e)
        {
            _log.warn("There was an error while updating account:" + e);
        }
    }
}

 

  • 5 months later...
  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • Offtopic, personal attacks, probably too old to use that much memes and what's YOUR actual contribution to L2J, in order I laugh aswell ?   The main poster quotes my pack so I answer accordingly, while you advertise L2JFrozen in both of your posts - discontinued since 2014 (? 1132 rev), with none taking back the open source lead while anyone could.   If you're somewhat affiliated to hopzone, you probably packed way more money than me. Packs don't make any type of money (barely 100e/month) and if you would follow me, you would know there are ways to handle it or even getting paid.   Hope I was short enough, 🧂🤡.
    • Hi guys, this is a CMS im sharing for lineage 2 servers, im tired of the crap i see on new release servers. Dont let me start on the IA developed ones lmao.   📋 Description Free and open source template to create landing pages for Lineage 2 private servers. Designed with a dark fantasy theme and modern animations. ✨ Current Features This FREE version includes: Complete Landing Page - Professional design ready to use Multi-language Support - Spanish, English, Portuguese Dark Fantasy Theme - With animated UI elements Server Information - Rates, features, and rules Olympiad Ranking - Rankings display Download Section - For game client Skins and Animations Gallery Streaming Widget - Twitch/Kick integration Fully Customizable - Via configuration files ❌ Not Included in Free Version ❌ User Registration System ❌ Online Players Counter ❌ Donation Panel 💎 Premium Integrations IntegrationPrice Registration System $50 USD Online Players Counter $50 USD Donation Panel $50 USD   📧 Contact: https://gh0tstudio.com 🛠️ Tech Stack Technology    Version    Description React              19.2.0       UI Library TypeScript       5.8.2        Static typing Vite                 6.2.0         Build tool TailwindCSS   CDNCSS    Framework Lucide React   0.554.0         Icons i18next           23.16.0       Internationalization react-i18next   15.1.0        React bindings for i18n All documentation provided for AI AGENTS to make changes on the ui texts and so on. u can have a look on the cms fully working with donation panel, online count and register via: https://crmlineage2.vercel.app/ https://github.com/6h0T/CRM-LINEAGE2-FREE If u are in the lookings to develop a unique website for ur projects, u can dm me or contact me throw my socials on my profile. all code has encrypted references so any type of rebranding, copying or selling without authorization will result in take downs
    • Hello dude, i can help u out, i reached to u via DM, my studio is https://gh0tstudio.com i have worked with almost 40 brands on developing Private Lineage and Mu online servers, dashboard for vote pages and more. I sent u some examples too
    • L2 TARTARUS - HTML DESIGN       L2 KOMBAT - ANIMATED BORDER   L2 SERENITY - ANIMATED LOGO   L2 ARCANE - COMMUNITY BOARD     L2 AMERIKA - ADVERTISING BANNER   L2 ZERON - ADVERTISING BANNER  
    • SOCNET — 生日快乐! 感谢您一直陪伴我们! 为期一周的礼物、奖励和折扣盛宴! 今天我们庆祝SOCNET项目的生日——而礼物属于您! 我们为所有服务准备了超强优惠: ⭐ SOCNET STORE — 商店 (网站/Telegram) 1. 优惠码BIRTHDAY — 20%折扣 可用于购买任何商品! 2. 大额购买礼品 在任意商品上消费$200,即可任选一件价值不超过$10的商品——免费赠送! 3. 在我们商店主题帖中发表评论可获赠余额 "Happy Birthday, SOCNET. My username/email is":BHW、BFD、voided、nulled 和 patched 论坛。 ➡ 1个论坛 = $1余额! 通过下方提供的联系方式将帖子截图发送给客服,附上您的登录名/邮箱,即可领取奖励。 ⭐ SOCNET SMM 面板 1. 充值 = 奖励 充值$100并获得+$5余额。 充值后请在面板内创建工单。 2. 在我们的 SMM 面板主题帖中发表评论可获赠余额 "Happy Birthday, SOCNET. My username/email is":BHW、BFD、voided、nulled 和 patched 论坛。 ➡ 1个论坛 = $1余额! 通过下方提供的联系方式将帖子截图发送给客服,附上您的登录名/邮箱,即可领取奖励。 ⭐SOCNET STARS — Telegram Stars/Premium 购买机器人 1. 大额购买 = 巨额奖励 单笔购买>1000 Stars,即可获赠+100 Stars! 购买后请联系支持。 2. 在我们 Stars 购买机器人的主题帖中发表评论可获赠余额 "Happy Birthday, SOCNET. My username/email is":BHW、BFD、voided、nulled 和 patched 论坛。 发表评论: ➡ 1个论坛 = +50 Stars余额! 通过下方提供的联系方式将帖子截图发送给客服,附上您的登录名/邮箱,即可领取奖励。 ⭐SOCNET SMS 虚拟号码服务 1. 充值赠送奖励 充值$50即可获赠+$10。 充值后只需联系支持即可。 2. 在我们的 SMS 服务主题帖中发表评论可获赠余额 "Happy Birthday, SOCNET. My username/email is":BHW、BFD、voided、nulled 和 patched 论坛。 ➡ 1个论坛 = $1余额! 通过下方提供的联系方式将帖子截图发送给客服,附上您的登录名/邮箱,即可领取奖励。 让我们一起庆祝吧! 活动有效期为2025年12月02日至12月07日(含)。 不要错过——这是全年最优惠的条件! 新闻: ➡ Telegram 频道: https://t.me/accsforyou_shop ➡ WhatsApp 频道: https://chat.whatsapp.com/K8rBy500nA73z27PxgaJUw?mode=ems_copy_t ➡ Discord 服务器: https://discord.gg/y9AStFFsrh 联系方式 & 支持: ➡ Telegram: https://t.me/socnet_support ➡ WhatsApp: https://wa.me/79051904467 ➡ Discord: socnet_support ➡ ✉ Email: solomonbog@socnet.store
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock