Jump to content
  • 0

Change that code to work like a command


Question

Posted (edited)

[GR]Μπορεί κάποιος να με βοηθήσει να αλλάξω αυτόν τον κώδικα  να λειτουργεί σαν  command ?

[EN]Maybe someone can help me to change that code to work like a command ?

 

/* 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 2, 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 *
 * http://www.gnu.org/copyleft/gpl.html
 */
package com.l2jfrozen.gameserver.model.actor.instance;

import java.security.MessageDigest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.StringTokenizer;

import com.l2jfrozen.Config;
import com.l2jfrozen.crypt.Base64;
import com.l2jfrozen.gameserver.ai.CtrlIntention;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
import com.l2jfrozen.gameserver.network.serverpackets.MyTargetSelected;
import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jfrozen.gameserver.network.serverpackets.ValidateLocation;
import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
import com.l2jfrozen.util.CloseUtil;
import com.l2jfrozen.util.database.L2DatabaseFactory;

public class L2ChangePasswordInstance extends L2FolkInstance
{
 public L2ChangePasswordInstance(int objectId, L2NpcTemplate template)
 {
 super(objectId, template);
 }

 @Override
 public void onAction(L2PcInstance player)
 {
 if (!canTarget(player))
 {
 return;
 }

 player.setLastFolkNPC(this);

 // Check if the L2PcInstance already target the L2NpcInstance
 if (this != player.getTarget())
 {
 // Set the target of the L2PcInstance player
 player.setTarget(this);

 // Send a Server->Client packet MyTargetSelected to the L2PcInstance player
 MyTargetSelected my = new MyTargetSelected(getObjectId(), 0);
 player.sendPacket(my);
 my = null;

 // Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
 player.sendPacket(new ValidateLocation(this));
 }
 else
 {
 // Calculate the distance between the L2PcInstance and the L2NpcInstance
 if (!canInteract(player))
 {
 // Notify the L2PcInstance AI with AI_INTENTION_INTERACT
 player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
 }
 else
 {
 showHtmlWindow(player);
 }
 }

 player.sendPacket(new ActionFailed());
 }

 private void showHtmlWindow(L2PcInstance player)
 {
 String filename = "data/html/mods/ChangePassword.htm";
 NpcHtmlMessage html = new NpcHtmlMessage(1);
 html.setFile(filename);
 html.replace("%objectId%", String.valueOf(getObjectId()));
 player.sendPacket(html);
 filename = null;
 html = null;
 }

 @Override
 public void onBypassFeedback(L2PcInstance player, String command)
 {
 if (command.startsWith("change_password"))
 {
 StringTokenizer st = new StringTokenizer(command);
 st.nextToken();
 String curPass = null;
 String newPass = null;
 String repPass = null;
 try
 {
 if (st.hasMoreTokens())
 {
 curPass = st.nextToken();
 newPass = st.nextToken();
 repPass = st.nextToken();
 }
 else
 {
 player.sendMessage("Please fill in all the blanks before requesting for a password change.");
 return;
 }
 changePassword(curPass, newPass, repPass, player);
 }
 catch (StringIndexOutOfBoundsException e)
 {
 if (Config.ENABLE_ALL_EXCEPTIONS)
 {
 e.printStackTrace();
 }
 }
 }
 }

 @SuppressWarnings("null")
public static boolean changePassword(String currPass, String newPass, String repeatNewPass, L2PcInstance activeChar)
 {
 if (newPass.length() < 5)
 {
 activeChar.sendMessage("The new password is too short!");
 return false;
 }
 if (newPass.length() > 15)
 {
 activeChar.sendMessage("The new password is too long!");
 return false;
 }
 if (!newPass.equals(repeatNewPass))
 {
 activeChar.sendMessage("Repeated password doesn't match the new password.");
 return false;
 }

 Connection con = null;
 String password = null;
 try
 {
 MessageDigest md = MessageDigest.getInstance("SHA");
 byte[] raw = currPass.getBytes("UTF-8");
 raw = md.digest(raw);
 String currPassEncoded = Base64.encodeBytes(raw);

 con = L2DatabaseFactory.getInstance().getConnection(false);
 PreparedStatement statement = con.prepareStatement("SELECT password FROM accounts WHERE login=?");
 statement.setString(1, activeChar.getAccountName());
 ResultSet rset = statement.executeQuery();
 while (rset.next())
 {
 password = rset.getString("password");
 }
 rset.close();
 statement.close();
 byte[] password2 = null;
 if (currPassEncoded.equals(password))
 {
 password2 = newPass.getBytes("UTF-8");
 password2 = md.digest(password2);

 PreparedStatement statement2 = con.prepareStatement("UPDATE accounts SET password=? WHERE login=?");
 statement2.setString(1, Base64.encodeBytes(password2));
 statement2.setString(2, activeChar.getAccountName());
 statement2.executeUpdate();
 statement2.close();

 activeChar.sendMessage("Your password has been changed successfully!");
 }
 else
 {
 activeChar.sendMessage("The current password you've inserted is incorrect, please try again!");

 return password2 != null;
 }
 }
 catch (Exception e)
 {
 if (Config.ENABLE_ALL_EXCEPTIONS)
 {
 e.printStackTrace();
 }

 LOGGER.info("could not update the password of account: " + activeChar.getAccountName());
 }
 finally
 {
 CloseUtil.close(con);
 }

 return true;
 }
}

 

Edited by cyta5

1 answer to this question

Recommended Posts

Guest
This topic is now closed to further replies.


  • Posts

    • Fresh off my private server for inspiration.
    • Custom High Five server L2insolence will open 2026-06-17 21:00 GMT+2 ! ! ! Web: http://www.l2insolence.eu/ Discord: https://discord.gg/duMjnj3y9A We have custom: 10 diferent looking custom armor sets. 8 weapon sets, 2 weapons sets are upgradable. 6 jewel sets. ----------------------------------- All custom tatto, masks, cloaks, agathions, belts, bracelest, talismans and more. Everi single item have own custom stats like: +p.atk% , +m.atk% , +p/m.def% and mutch more. All items in game have own stats. With custom looks. Glowing etc. ----------------------------------- Rates XP, SP: 25x Spoil and Drop: 10x Server Hard Farm ----------------------------------- Enchantment Safe enchant: +20099 Max enchant: +20099 All scrolls: 100% ----------------------------------- You can use scrolls or item enchant NPC to make +++ abd life beter. NPC Buffer There's an NPC buffer in all of our main towns. We have custom self buffs learned with npc with custom stats. Global Gatekeeper. GM Shop with normal items and custom ones, Event NPC, item upgrader NPC. Raid Bosses, every zone have its own boss and drops for rare mats, respawn every 10 seconds.. Olympiad The olympiad is ongoing every two weeks.
    • I agree that kernel-level protection offers much deeper visibility and control, especially when it comes to advanced bots and bypass techniques. That said, I'm not trying to claim that a usermode solution is impossible to bypass. My goal is simply to increase the cost and complexity of bypassing the protection while keeping deployment simple, stable, and compatible for server owners. A lot of Interlude server operators don't want to install kernel drivers or deal with the risks and maintenance that come with them. That's why I'm currently focusing on a layered approach: secure launcher architecture, HWID licensing, session validation, anti-debugging, injection detection, integrity checks, replay protection, and heartbeat monitoring. I'm not ruling out kernel support in the future. Right now, my priority is gathering real-world feedback, improving the product, and learning how people attempt to bypass different protection layers. I appreciate the feedback and the discussion.
    • not true, you can change any bot program name so the ones that are injecting aint a problem any more, you can aswell bypass everything in a dll so his way of thinking isnt bad at all
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..