- 0
-
Posts
-
No matter what you are going to use, paid or non-paid or whatever, everything requires personal time investment and a lot of trial and error in many sectors of IT. I have used and seen (clients of mine) L2J Sunrise, Mobius, ACIS, and Lucera. Not even one was close enough to providing a decent outcome without the need for some heavy dev intervention. Even if you provide a decent pack, you will have to think about cheaters, marketing, monitoring, network protection, and the list goes on depending on the problem. Thus, I have no clue why people here debate so much about datapacks because I remember the days when we were playing on private servers with 80% less functionality than the current Lineage 2 emulator state, and it was enough to have fun. Now the leftovers are such a toxic community that I have no idea what drives people to open projects except money. My 2 cents choose whatever will ease your life in terms of development and your life/work/budget balance and dont spent months trying to figure out what datapack is superior over the other. You have more serious things to consider.
-
By Meissgenry · Posted
I’ve played around with similar growth setups, and what usually makes the whole thing smoother is pairing them with something steady on the side. For example, I once used famoid.com for a small boost so the main profile didn’t look empty while the Mother/Child flow warmed up. Your themed accounts idea can work nicely as long as the profiles stay active and feel human enough to spark replies. -
I never said that, can you read? Are you going to start an argument when that isn't the main goal of this post? Or are you just used to the same old discussion mechanics? Thank you very much for your recommendation. A few months ago, I worked on a project called 'L2Avalon' using a compiled Lucera2 (it was the only thing the project leader provided me), and based on my 20 years of experience playing Lineage 2, I feel like it's broken everywhere, unless the specific version of Lucera I was using was just old. I don't have a problem coding and fixing things, but I am looking for a solid base so I don't do unnecessary work. Replying to the first guy: I would never discredit paid work; obviously, any paid work will be better than a free one for obvious reasons. But my reality is that I don't want to throw money away, mainly because saving up a large sum of money is a matter of several months in my current situation here in Argentina.
-
I was not expecting either system to be mentioned but to update this information itopz is a topsite VDSystem is a server vote system as the creator i gave the vote system free but made mandatory to use my topsite https://github.com/nightw0lv/VDSystem download free, needs an extensive configuration and all java versions to be installed so it can befully be build, but only if you plan to maintain the full solution for all projects in case you want to use only 1 project you just copy the files for example frozen https://github.com/nightw0lv/VDSystem/tree/master/Interlude/Frozen copy paste inside your project, apply the patch of call the main class to gameserver.java and done. note for active projects minor changes will probably be required about the latest version hopzone.eu my other topsite is also required to have a server and get an api key same reason system is free, appriciate it. there is a huge difference that also extends as example in l2j Note to the topic owner @zambog420 lucera is also an option specially if you feel coding ready with intellij
-
-
Topics

Question
cyta5
[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 cyta51 answer to this question
Recommended Posts