Jump to content

Question

9 answers to this question

Recommended Posts

  • 0
Posted

Account Manager L2JFrozen:

l2jfrozen.gameserver.model.actor.instance Create java file with name L2PasswordChangerInstance make one npc with type:L2PasswordChanger

 

 

/* 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 com.l2jfrozen.crypt.Base64;
import com.l2jfrozen.gameserver.ai.CtrlIntention;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
import com.l2jfrozen.gameserver.network.serverpackets.LeaveWorld;
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.database.L2DatabaseFactory;

import java.security.MessageDigest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.StringTokenizer;
import javolution.text.TextBuilder;

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

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

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

if (this != player.getTarget())
{
player.setTarget(this);

player.sendPacket(new MyTargetSelected(getObjectId(), 0));

player.sendPacket(new ValidateLocation(this));
}
else if (!canInteract(player))
{
player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
}
else
{
showHtmlWindow(player);
}

player.sendPacket(new ActionFailed());
}

private void showHtmlWindow(L2PcInstance activeChar)
{
NpcHtmlMessage nhm = new NpcHtmlMessage(5);
TextBuilder replyMSG = new TextBuilder("");

replyMSG.append("<html><title>L2 Test Account Manager</title>");
replyMSG.append("<body><center>");
replyMSG.append("To change your password:<br1> First fill in your current password and then your new!</font><br>");
replyMSG.append("Current Password: <edit var=\"cur\" width=100 height=15><br>");
replyMSG.append("New Password: <edit var=\"new\" width=100 height=15><br>");
replyMSG.append("Repeat New Password: <edit var=\"repeatnew\" width=100 height=15><br><br>");
replyMSG.append("<button value=\"Change Password\" action=\"bypass -h npc_" + getObjectId() + "_change_password $cur $new $repeatnew\" width=204 height=20 back=\"sek.cbui75\" fore=\"sek.cbui75\">");
replyMSG.append("</center></body></html>");

nhm.setHtml(replyMSG.toString());
activeChar.sendPacket(nhm);

activeChar.sendPacket(new ActionFailed());
}

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() > 20)
{
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();
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("Congratulations! Your password has been changed succesfully. You will now be disconnected for security reasons. Please login again!");
try
{
Thread.sleep(3000L);
}
catch (Exception e)
{
}

activeChar.deleteMe();

activeChar.sendPacket(new LeaveWorld());
}
else
{
activeChar.sendMessage("The current password you've inserted is incorrect! Please try again!");

return password2 != null;
}
}
catch (Exception e)
{
_log.warning("could not update the password of account: " + activeChar.getAccountName());
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}

}

return true;
}
}
  

  • 0
Posted

Account Manager L2JFrozen:

l2jfrozen.gameserver.model.actor.instance Create java file with name L2PasswordChangerInstance make one npc with type:L2PasswordChanger

 

 

/* 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 com.l2jfrozen.crypt.Base64;
import com.l2jfrozen.gameserver.ai.CtrlIntention;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
import com.l2jfrozen.gameserver.network.serverpackets.LeaveWorld;
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.database.L2DatabaseFactory;

import java.security.MessageDigest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.StringTokenizer;
import javolution.text.TextBuilder;

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

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

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

if (this != player.getTarget())
{
player.setTarget(this);

player.sendPacket(new MyTargetSelected(getObjectId(), 0));

player.sendPacket(new ValidateLocation(this));
}
else if (!canInteract(player))
{
player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
}
else
{
showHtmlWindow(player);
}

player.sendPacket(new ActionFailed());
}

private void showHtmlWindow(L2PcInstance activeChar)
{
NpcHtmlMessage nhm = new NpcHtmlMessage(5);
TextBuilder replyMSG = new TextBuilder("");

replyMSG.append("<html><title>L2 Test Account Manager</title>");
replyMSG.append("<body><center>");
replyMSG.append("To change your password:<br1> First fill in your current password and then your new!</font><br>");
replyMSG.append("Current Password: <edit var=\"cur\" width=100 height=15><br>");
replyMSG.append("New Password: <edit var=\"new\" width=100 height=15><br>");
replyMSG.append("Repeat New Password: <edit var=\"repeatnew\" width=100 height=15><br><br>");
replyMSG.append("<button value=\"Change Password\" action=\"bypass -h npc_" + getObjectId() + "_change_password $cur $new $repeatnew\" width=204 height=20 back=\"sek.cbui75\" fore=\"sek.cbui75\">");
replyMSG.append("</center></body></html>");

nhm.setHtml(replyMSG.toString());
activeChar.sendPacket(nhm);

activeChar.sendPacket(new ActionFailed());
}

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() > 20)
{
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();
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("Congratulations! Your password has been changed succesfully. You will now be disconnected for security reasons. Please login again!");
try
{
Thread.sleep(3000L);
}
catch (Exception e)
{
}

activeChar.deleteMe();

activeChar.sendPacket(new LeaveWorld());
}
else
{
activeChar.sendMessage("The current password you've inserted is incorrect! Please try again!");

return password2 != null;
}
}
catch (Exception e)
{
_log.warning("could not update the password of account: " + activeChar.getAccountName());
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}

}

return true;
}
}
  

alo einai to account manager...
  • 0
Posted

Ti ennoeis allo?zitise account manager gia l2jfrozen kai tou ton edosa.auto eine ena npc pou allazei to password tou.ti allo 8elei diladi?

  • 0
Posted

Ti ennoeis allo?zitise account manager gia l2jfrozen kai tou ton edosa.auto eine ena npc pou allazei to password tou.ti allo 8elei diladi?

Προφανως εννοει account manager για registration για τον σερβερ του.

  • 0
Posted

Account Manager L2JFrozen:

l2jfrozen.gameserver.model.actor.instance Create java file with name L2PasswordChangerInstance make one npc with type:L2PasswordChanger

 

 

/* 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 com.l2jfrozen.crypt.Base64;
import com.l2jfrozen.gameserver.ai.CtrlIntention;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
import com.l2jfrozen.gameserver.network.serverpackets.LeaveWorld;
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.database.L2DatabaseFactory;

import java.security.MessageDigest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.StringTokenizer;
import javolution.text.TextBuilder;

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

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

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

if (this != player.getTarget())
{
player.setTarget(this);

player.sendPacket(new MyTargetSelected(getObjectId(), 0));

player.sendPacket(new ValidateLocation(this));
}
else if (!canInteract(player))
{
player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
}
else
{
showHtmlWindow(player);
}

player.sendPacket(new ActionFailed());
}

private void showHtmlWindow(L2PcInstance activeChar)
{
NpcHtmlMessage nhm = new NpcHtmlMessage(5);
TextBuilder replyMSG = new TextBuilder("");

replyMSG.append("<html><title>L2 Test Account Manager</title>");
replyMSG.append("<body><center>");
replyMSG.append("To change your password:<br1> First fill in your current password and then your new!</font><br>");
replyMSG.append("Current Password: <edit var=\"cur\" width=100 height=15><br>");
replyMSG.append("New Password: <edit var=\"new\" width=100 height=15><br>");
replyMSG.append("Repeat New Password: <edit var=\"repeatnew\" width=100 height=15><br><br>");
replyMSG.append("<button value=\"Change Password\" action=\"bypass -h npc_" + getObjectId() + "_change_password $cur $new $repeatnew\" width=204 height=20 back=\"sek.cbui75\" fore=\"sek.cbui75\">");
replyMSG.append("</center></body></html>");

nhm.setHtml(replyMSG.toString());
activeChar.sendPacket(nhm);

activeChar.sendPacket(new ActionFailed());
}

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() > 20)
{
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();
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("Congratulations! Your password has been changed succesfully. You will now be disconnected for security reasons. Please login again!");
try
{
Thread.sleep(3000L);
}
catch (Exception e)
{
}

activeChar.deleteMe();

activeChar.sendPacket(new LeaveWorld());
}
else
{
activeChar.sendMessage("The current password you've inserted is incorrect! Please try again!");

return password2 != null;
}
}
catch (Exception e)
{
_log.warning("could not update the password of account: " + activeChar.getAccountName());
}
finally
{
try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
_log.warning("Failed to close database connection!");
}

}

return true;
}
}
  

Φίλε επειδή έψαχνα και εγώ ενα τέτοιο δοκίμασα τον κώδικα να δω αν δουλεύει. Το npc είναι μια χαρά αλλά όταν πατάω να αλλάξει το pass μου βγάζει error στο gameserver console "Could not update the password of account:di8en"
  • 0
Posted

alo einai to account manager...

kalo afto tha to balo alla thelo na min ine aytomata na mpenoun kai na make register gia interlude milao kai meta na logarou iprxi tha balo to code pantos gia alagh pass

alla thelo na balo kai sto site na kanoun register mporeis na help

  • 0
Posted

kalo afto tha to balo alla thelo na min ine aytomata na mpenoun kai na make register gia interlude milao kai meta na logarou iprxi tha balo to code pantos gia alagh pass

alla thelo na balo kai sto site na kanoun register mporeis na help

 

Προφανώς ψάχνεις κάτι τέτοιο Account Manager With Admin Panel

  • 0
Posted

Προφανώς ψάχνεις κάτι τέτοιο Account Manager With Admin Panel

L2Reon to npc me lei quest sto class ti bazo on topic sto register file me lei line 38 39 40 bgazi error sto register file perasa ta pass kai database alla bgazi problima sto register bazo ta stixia kai afto sinnexizi mporis na help

 

$connect = mysql_connect("localhost", "root", "root") or die("loginserver_beta.");
mysql_select_db("gameserver_beta", $connect) or die("loginserver_beta.");

ta exw  sosta?. kai kita error sto register file

 

username = $_POST[''];
$password = $_POST[''];
$submit = $_POST[''];

ti nabo edo pera ine to error 38,39,40

 

den mporo na balo foto

Guest
This topic is now closed to further replies.


  • Posts

    • Well, I made this. So if you want to create a talent system design you can always dm me. You can find my contact info here 🙂  
    • como vamos conseguir ler esse arquivos pra salvar ?  
    • DISCORD : https://discord.com/users/325653525793210378 utchiha_market telegram : https://t.me/utchiha_market SELLIX STORE : https://utchihamkt.mysellix.io/ Join our server for more products : https://discord.gg/uthciha-services https://campsite.bio/utchihaamkt
    • Eldamar Don't tell me what to do, stop spamming and mind your own business, it's 2025, who's going to play your server like it's 2007, you're ridiculous.
    • New Season Koofs Vs Noobs Get ready for the return of the epic Lineage II experience! L2KvN is coming back stronger than ever, featuring thrilling PvP, powerful factions, and unforgettable gameplay! Whether you're new to the world of L2KvN or returning to conquer it once more, there’s something for everyone:   Global Launch Times Mark your calendars! The server will launch at the following times around the world 20:00 Greece (Athens) GMT +2  20:00 Russia (Moscow) GMT +3 00:00 Russia (Novosibirsk) GMT +7 05:00 Russia (Vladivostok) GMT +10 14:00 Brazil GMT -3 13:00 Argentina GMT -3 20:00 Lithuania GMT +2 18:00 United Kingdom GMT 0 13:00 USA (Eastern Time) GMT -5 10:00 USA (Pacific Time) GMT -8   L2KvN server is with high rates and custom features. Offers fast progression and an exciting experience. Perfect for fans of intense gameplay.   Server Chronicles Interlude Rates: PvP(High) Adena: x1(Custom) Drop Rate: x1(Custom) 1 PvP = 2 Adena(4 For Premium Users)   Premium Account can be activated by purchasing Premium Account Coupon from L2Store and double-clicking the coupon. Premium Account provides the following: 1 PvP: 4 Adena   General Rates Start up Player System Instant LvL 80 Choose For What Faction You Love To Fight [Koofs - Noobs] Koofs Base: Dark Elf Village Noobs Base: Elven Village Prepare You Character Scheme Buff Or Choose Auto Buff PrePare Your Character Equipment From KvN Shop Killing spree systems Full GM shop. Free class change and Subclass All NPCs available in town. Custom Items Balanced. Community Board BugReport/RaidInfo/TopPvP-Online 1 PvP = 1 Adena (2 If Premium)   Enchant Rates Safe Enchant +6 Max Enchant +21 Normal Scroll Chance: 100% (+0 to +6) Blessed Scroll Chance: 85% (+6 to +21) Ex: If +14 failed for +15, return +14   LifeStone Rates High Lifestone Chance: 5% Top Lifestone Chance: 10%   Grand Bosses Queen Ant 8H +1Random (there is a chance to spawn in 7H or 9H) Drops RB Ring/LS/BOGS Baium 8H +1Random (there is a chance to spawn in 7H or 9H) Drops RB Ring/LS/BOGS Zaken 8H +1Random (there is a chance to spawn in 7H or 9H) Drops RB Ring/LS/BOGS Antharas 8H +1Random (there is a chance to spawn in 7H or 9H) Drops RB Ring/LS/BOGS Valakas 8H +1Random (there is a chance to spawn in 7H or 9H) Drops RB Ring/LS/BOGS   Elo Ranking System start unranked and ranks is Unranked-Iron-Bronze-Silver-Gold-Platinum-Diamond All ranks have 3 rank example Iron III Iron II iron I (iron iii is first and iron i is last. you need iron 1 to upgrade to silver.) unranked to iron need 50 points. and all ranks need 100 points to up a rank 5 points per kill if you die you lose 3 points. if you demote (have 4 points and die and you silver i you will demote to bronze iii 20 points.) if you bronze i 99 points and got 1 kill (+5 points) you uprank to silver iii 20 points. every rank have berets. see in video berets in ranks Iron/Bronze/Silver/Gold/Platinum/Diamond (only visual no extra buffs)   PvP Zone System maps change every 1 hour Orc Village Gludin Town   Event System Events every 1 hour TeamVsTeam => 12:00 14:00 16:00 18:00 20:00 22:00 23:59 02:00 04:00 06:00 08:00 10:00 12:00 Capture The Flag => 13:00 15:00 17:00 19:00 21:00 23:00 01:00 03:00 05:00 07:00 09:00 11:00 Rewards = MvP 5 Events | Winner Team 10 Events | Looser 5 Events   🌐 Website: https://l2kvn.com/ 🌐 Website: https://discord.gg/unn2XBhwef
  • Topics

×
×
  • Create New...