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...

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...