Jump to content
  • 0

[HELP]DeathCountManager Simple Bug.


Question

Posted

Freya HighFive 5 BETA

 

hello, could you help me with this code?

 

I talk to the npc -> click on "Visualizar" shows the list of characters correctly.

but when I close the window and open it again and talk to the npc -> click on "Visualizar" again doubles the list of characters and every time I do that increases the list of the same characters every 10 results

 

you can help me fix it? or better?

 

problem at L2TopDeathManagerInstance.java

 

FullPatch

 

### Eclipse Workspace Patch 1.0
#P L2J_LastShadowServer
Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java    (revision 5722)
+++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java    (working copy)
@@ -320,9 +325,9 @@
    private static final String DELETE_ITEM_REUSE_SAVE = "DELETE FROM character_item_reuse_save WHERE charId=?";
    
    // Character Character SQL String Definitions:
-   private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,charId,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,fame,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,title_color,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,base_class,newbie,nobless,power_grade,createDate) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
-   private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,fame=?,pvpkills=?,pkkills=?,clanid=?,race=?,classid=?,deletetime=?,title=?,title_color=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,bookmarkslot=?,vitality_points=?,language=? WHERE charId=?";
-   private static final String RESTORE_CHARACTER = "SELECT account_name, charId, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, fame, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, title_color, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, newbie, nobless, power_grade, subpledge, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,bookmarkslot,vitality_points,createDate,language FROM characters WHERE charId=?";
+   private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,charId,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,fame,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,title_color,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,base_class,newbie,nobless,power_grade,createDate,deaths) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
+   private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,fame=?,pvpkills=?,pkkills=?,clanid=?,race=?,classid=?,deletetime=?,title=?,title_color=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,bookmarkslot=?,vitality_points=?,language=?,deaths=? WHERE charId=?";
+   private static final String RESTORE_CHARACTER = "SELECT account_name, charId, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, expBeforeDeath, sp, karma, fame, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, title_color, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, base_class, onlinetime, isin7sdungeon, punish_level, punish_timer, newbie, nobless, power_grade, subpledge, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,bookmarkslot,vitality_points,createDate,language,deaths FROM characters WHERE charId=?";
    
    // Character Teleport Bookmark:
    private static final String INSERT_TP_BOOKMARK = "INSERT INTO character_tpbookmark (charId,Id,x,y,z,icon,tag,name) values (?,?,?,?,?,?,?,?)";
@@ -541,6 +546,14 @@
    private int _duelId = 0;
    private SystemMessageId _noDuelReason = SystemMessageId.THERE_IS_NO_OPPONENT_TO_RECEIVE_YOUR_CHALLENGE_FOR_A_DUEL;
    
+   /** Numero de pjs muertos en pvp suma una muerte */
+   private int _deaths;
+   
    /** Boat and AirShip */
    private L2Vehicle _vehicle = null;
    private Point3D _inVehiclePosition;
@@ -2751,6 +2767,23 @@
    }
    
    /**
+    * @return Las muertes que L2PcInstance recoje.
+    */
+   public int getDeaths()
+   {
+       return _deaths;
+   }
+   
+   /**
+    * Setea las deaths en L2PcInstance durante el pvp flag.
+    * @param deaths
+    */
+   public void setDeaths(int deaths)
+   {
+       _deaths = deaths;
+   }
+   
+   /**
     * @return the Fame of this L2PcInstance
     */
    public int getFame()
@@ -6188,6 +6236,7 @@
        ))
        {
            increasePvpKills(target);
+           increaseDeaths(target);
        }
        else
        // Target player doesn't have pvp flag set
@@ -6197,6 +6246,7 @@
            {
                // 'Both way war' -> 'PvP Kill'
                increasePvpKills(target);
+               increaseDeaths(target);
                return;
            }
@@ -6235,6 +6289,23 @@
    }
    
    /**
+    * Incrementa las muertes y envia informacion al personaje
+    * @param target
+    */
+   public void increaseDeaths(L2Character target)
+   {
+       if (!(target instanceof L2PcInstance) && AntiFeedManager.getInstance().check(this, target))
+       {
+           // incrementa Deaths cuando el pj es matado en PvPMode
+           setDeaths(getDeaths() + 1);
+           
+           // Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter
+           sendPacket(new UserInfo(this));
+           sendPacket(new ExBrExtraUserInfo(this));
+       }
+   }
+   
+   /**
     * Increase pk count, karma and send the info to the player
     * @param target
     */
@@ -7679,6 +7750,7 @@
            statement.setInt(35, isNoble() ? 1 : 0);
            statement.setLong(36, 0);
            statement.setDate(37, new Date(getCreateDate().getTimeInMillis()));
+           statement.setInt(38, getDeaths());
            statement.executeUpdate();
        }
        catch (Exception e)
@@ -7873,6 +7945,9 @@
                    // Language
                    player.setLang(rset.getString("language"));
                    
+                   // Setea deaths No necesita restaurar
+                   player.setDeaths(rset.getInt("deaths"));
+                   
                    // Retrieve the name and ID of the other characters assigned to this account.
                    try (PreparedStatement stmt = con.prepareStatement("SELECT charId, char_name FROM characters WHERE account_name=? AND charId<>?"))
                    {
@@ -8316,7 +8391,8 @@
            statement.setInt(50, getBookMarkSlot());
            statement.setInt(51, getVitalityPoints());
            statement.setString(52, getLang());
-           statement.setInt(53, getObjectId());
+           statement.setInt(53, getDeaths());
+           statement.setInt(54, getObjectId());
            
            statement.execute();
            statement.close();
\ No newline at end of file
Index: java/com/l2jserver/gameserver/model/actor/instance/L2TopDeathManagerInstance.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/instance/L2TopDeathManagerInstance.java   (revision 0)
+++ java/com/l2jserver/gameserver/model/actor/instance/L2TopDeathManagerInstance.java   (working copy)
@@ -0,0 +1,181 @@
+/*
+ * 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.l2jserver.gameserver.model.actor.instance;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+
+import javolution.text.TextBuilder;
+
+import com.l2jserver.L2DatabaseFactory;
+import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
+import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
+
+/**
+ * @author DLjac
+ */
+
+public class L2TopDeathManagerInstance extends L2NpcInstance
+{
+   public String filename;
+   
+   public L2TopDeathManagerInstance(int objectId, L2NpcTemplate template)
+   {
+       super(objectId, template);
+   }
+   
+   @Override
+   public void onBypassFeedback(L2PcInstance player, String command)
+   {
+       if ((player == null) || (player.getLastFolkNPC() == null) || (player.getLastFolkNPC().getObjectId() != this.getObjectId()))
+       {
+           return;
+       }
+       
+       if (command.startsWith("TopDeaths"))
+       {
+           TopDeaths(player);
+       }
+   }
+   
+   @Override
+   public void showChatWindow(L2PcInstance player, int val)
+   {
+       filename = (getHtmlPath(getNpcId(), val));
+       NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
+       msg.setHtml(TopWindow(player));
+       msg.replace("%objectId%", String.valueOf(this.getObjectId()));
+       player.sendPacket(msg);
+   }
+   
+   private String TopWindow(L2PcInstance player)
+   {
+       TextBuilder tb = new TextBuilder();
+       tb.append("<html><title>Ranking Basado en K/D</title><body>");
+       tb.append("<center>");
+       tb.append("<img src=\"l2ui_ch3.herotower_deco\" width=\"256\" height=\"32\"><tr>");
+       tb.append("<font color=\"999999\">Top 10 Kills/Deaths</font><br><br>");
+       tb.append("Hola! " + player.getName() + "<br>");
+       tb.append("<br>");
+       tb.append("<br>");
+       tb.append("<tr>");
+       tb.append("<td><button value=\"Visualizar\" action=\"bypass -h npc_%objectId%_TopDeaths\" width=\"100\" height=\"21\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></tr>");
+       tb.append("</tr>");
+       tb.append("<img src=\"l2ui_ch3.herotower_deco\" width=\"256\" height=\"32\"><br>");
+       tb.append("</center>");
+       tb.append("</body></html>");
+       return tb.toString();
+   }
+   
+   private int pos;
+   private final TextBuilder _deathsList = new TextBuilder();
+   
+   @SuppressWarnings("null")
+   private void TopDeaths(L2PcInstance player)
+   {
+       Connection con = null;
+       
+       try
+       {
+           pos = 1;
+           con = L2DatabaseFactory.getInstance().getConnection();
+           PreparedStatement statement = con.prepareStatement("SELECT char_name,pvpkills,deaths FROM characters WHERE accesslevel=0 ORDER BY deaths  LIMIT 10");
+           
+           ResultSet result = statement.executeQuery();
+           
+           while (result.next())
+           {
+               addChar(pos, result.getString("char_name"), result.getInt("pvpkills"), result.getInt("deaths"));
+               pos++;
+               
+               NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
+               TextBuilder sb = new TextBuilder();
+               sb.append("<html><title>Ranking Basado en K/D</title><body>");
+               sb.append("<center>");
+               sb.append("<img src=\"l2ui_ch3.herotower_deco\" width=256 height=32><br>");
+               sb.append("<font color=\"999999\">Top 10 Kills/Deaths</font><br><br>");
+               sb.append("<br>");
+               sb.append("<table border=0 width=250><tr>");
+               sb.append("<td FIXWIDTH=25 height=24 align=\"center\"><font color=\"ff0000\">No.</font></td>");
+               sb.append("<td FIXWIDTH=80 height=24 align=\"center\"><font color=\"ae9977\">Nombre</font></td>");
+               sb.append("<td FIXWIDTH=50 height=24 align=\"center\"><font color=\"ae9977\">Kills</font></td>");
+               sb.append("<td FIXWIDTH=50 height=24 align=\"center\"><font color=\"ae9977\">Deaths</font></td>");
+               sb.append("<td FIXWIDTH=60 height=24 align=\"center\"><font color=\"ea8b11\">K/D Ratio</font></td></tr></table>");
+               sb.append(loadDeathList());
+               sb.append("<img src=\"l2ui_ch3.herotower_deco\" width=256 height=32><br>");
+               sb.append("</center>");
+               sb.append("</body></html>");
+               html.setHtml(sb.toString());
+               player.sendPacket(html);
+           }
+           
+           result.close();
+           statement.close();
+       }
+       catch (Exception e)
+       {
+           e.printStackTrace();
+       }
+       finally
+       {
+           try
+           {
+               con.close();
+           }
+           catch (Exception e)
+           {
+               
+           }
+       }
+   }
+   
+   public String loadDeathList()
+   {
+       return _deathsList.toString();
+   }
+   
+   /**
+    * @param pos
+    * @param name
+    * @param pvp
+    * @param muertes
+    */
+   private void addChar(int pos, String name, int pvp, int muertes)
+   {
+       float ratecalc = (float) pvp / (float) muertes;
+       _deathsList.append("<table border=0 width=250><tr>");
+       _deathsList.append("<td FIXWIDTH=25 align=\"center\">" + pos + ".</td>");
+       _deathsList.append("<td FIXWIDTH=80 align=\"center\">" + name + "</td>");
+       _deathsList.append("<td FIXWIDTH=50 align=\"center\">" + pvp + "</td>");
+       _deathsList.append("<td FIXWIDTH=50 align=\"center\">" + muertes + "</td>");
+       _deathsList.append("<td FIXWIDTH=60 align=\"center\"><font color=FF0000>" + ratecalc + "</font></td></tr></table>");
+       }
+   }
+}
\ No newline at end of file

DataPack ->characters.sql

  `language` varchar(2) DEFAULT NULL,
+  `deaths` decimal(11,0) DEFAULT NULL,
  PRIMARY KEY (`charId`),

 

thank you very much

4 answers to this question

Recommended Posts

  • 0
Posted

_deathsList is maintained, so the content is growing and growing as you only append. Clear _deathsList once used or make _deathsList part of the methods in order the variable life cycle is taken in consideration.

 

Btw, _deathsList shouldn't be public and not be a class variable, as it can be generated by any player from the NPC (so the get... is pointless). Or if you want a public use, you have to maintain it in another way.

 

Finally you should HTMlize your internal text, in order it is saved in the HTMCache rather than being generated every time a player make a request (overused by players). I could say the same about the connection : you could maintain a list of top deaths rather than making a connection (and so make it public).

 

The problem with your current implementation is, if 2 players request the NPC in same time, it will use the same variable lol no matter if you clean it or not, and so you will end in the same situation you actually are.

 

So short : if you want to maintain a public list, you have to recode the whole concept. If you want only the NPC, drop the deathlist stuff and built it internally in addChar. You probably could generate names directly in the while(rs.next()), dropping addChar in the process.

  • 0
Posted

thanks for you comments, read this

 

rework of the code and now there is a different problem, just random 1 result not ORDER BY deaths DESC LIMIT 10

 

here update

/*
* 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.l2jserver.gameserver.model.actor.instance;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javolution.text.TextBuilder;

import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;

/**
* @author DLjac
*/

public class L2TopDeathManagerInstance extends L2NpcInstance
{
public String filename;

public L2TopDeathManagerInstance(int objectId, L2NpcTemplate template)
{
	super(objectId, template);
}

@Override
public void onBypassFeedback(L2PcInstance player, String command)
{
	if ((player == null) || (player.getLastFolkNPC() == null) || (player.getLastFolkNPC().getObjectId() != this.getObjectId()))
	{
		return;
	}

	if (command.startsWith("TopDeaths"))
	{
		TopDeaths(player);
	}
}

@Override
public void showChatWindow(L2PcInstance player, int val)
{
	filename = (getHtmlPath(getNpcId(), val));
	NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
	msg.setHtml(TopWindow(player));
	msg.replace("%objectId%", String.valueOf(this.getObjectId()));
	player.sendPacket(msg);
}

private String TopWindow(L2PcInstance player)
{
	TextBuilder tb = new TextBuilder();
	tb.append("<html><title>Ranking Basado en K/D</title><body>");
	tb.append("<center>");
	tb.append("<img src=\"l2ui_ch3.herotower_deco\" width=\"256\" height=\"32\"><br>");
	tb.append("<font color=\"999999\">Top 10 Kills/Deaths</font><br><br>");
	tb.append("Hola! " + player.getName() + "<br>");
	tb.append("<br>");
	tb.append("<br>");
	tb.append("<tr>");
	tb.append("<td><button value=\"Visualizar\" action=\"bypass -h npc_%objectId%_TopDeaths\" width=\"100\" height=\"21\" back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>");
	tb.append("</tr>");
	tb.append("<img src=\"l2ui_ch3.herotower_deco\" width=\"256\" height=\"32\"><br>");
	tb.append("</center>");
	tb.append("</body></html>");
	return tb.toString();
}

private int pos;

@SuppressWarnings("null")
private void TopDeaths(L2PcInstance player)
{
	Connection con = null;
	PreparedStatement statement = null;
	ResultSet result = null;

	try
	{
		pos = 1;
		con = L2DatabaseFactory.getInstance().getConnection();
		statement = con.prepareStatement("SELECT char_name,pvpkills,deaths FROM characters WHERE accesslevel=0 ORDER BY deaths DESC LIMIT 10");

		result = statement.executeQuery();

		while (result.next())
		{
			String name = result.getString("char_name");
			int pvp = result.getInt("pvpkills");
			int muertes = result.getInt("deaths");
			float ratecalc = (float) pvp / muertes;
			pos++;

			NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
			TextBuilder sb = new TextBuilder();
			sb.append("<html><title>Ranking Basado en K/D</title><body>");
			sb.append("<center>");
			sb.append("<img src=\"l2ui_ch3.herotower_deco\" width=256 height=32><br>");
			sb.append("<font color=\"999999\">Top 10 Kills/Deaths</font><br><br>");
			sb.append("<br>");
			sb.append("<table border=0 width=250><tr>");
			sb.append("<td FIXWIDTH=25 height=24 align=\"center\"><font color=\"ff0000\">No.</font></td>");
			sb.append("<td FIXWIDTH=80 height=24 align=\"center\"><font color=\"ae9977\">Nombre</font></td>");
			sb.append("<td FIXWIDTH=50 height=24 align=\"center\"><font color=\"ae9977\">Kills</font></td>");
			sb.append("<td FIXWIDTH=50 height=24 align=\"center\"><font color=\"ae9977\">Deaths</font></td>");
			sb.append("<td FIXWIDTH=60 height=24 align=\"center\"><font color=\"ea8b11\">K/D Ratio</font></td></tr></table>");
			sb.append("<table border=0 width=250><tr>");
			sb.append("<td FIXWIDTH=25 align=\"center\">" + pos + ".</td>");
			sb.append("<td FIXWIDTH=80 align=\"center\">" + name + "</td>");
			sb.append("<td FIXWIDTH=50 align=\"center\">" + pvp + "</td>");
			sb.append("<td FIXWIDTH=50 align=\"center\">" + muertes + "</td>");
			if (ratecalc > 1)
			{
				sb.append("<td FIXWIDTH=60 align=\"center\"><font color=99FF00>" + ratecalc + "</font></td></tr></table>");
			}
			else
			{
				sb.append("<td FIXWIDTH=60 align=\"center\"><font color=FF0000>" + ratecalc + "</font></td></tr></table>");
			}
			sb.append("<img src=\"l2ui_ch3.herotower_deco\" width=256 height=32><br>");
			sb.append("</center>");
			sb.append("</body></html>");
			html.setHtml(sb.toString());
			player.sendPacket(html);
		}

		result.close();
		statement.close();
	}
	catch (Exception e)
	{
		e.printStackTrace();
	}
	finally
	{
		try
		{
			con.close();
		}
		catch (Exception e)
		{

		}
	}
}
}

  • 0
Posted

At every rs.next() you create a new HTM. In the loop you have to .append( a StringBuilder, created before (let's say in the beginning of the method).

 

Your initial code wasn't totally wrong, but the TextBuilder was misplaced. Instead of being class variable, it must be internal variable, created and deleted in the process of HTM generating. I must add pos isn't a class variable aswell.

 

Btw, you should banned TextBuilder from your generated strings. It's a Javolution class, and Javolution sucks (poor performance compared to JDK 7). Use StringBuilder instead.

 

Finally, if you use JDK 7, all Connection should be made as follow :

 

	try (Connection con = L2DatabaseFactory.getInstance().getConnection())
	{
		int pos = 1;

		PreparedStatement statement = con.prepareStatement("SELECT char_name,pvpkills,deaths FROM characters WHERE accesslevel=0 ORDER BY deaths DESC LIMIT 10");

		ResultSet result = statement.executeQuery();

		(...)
	}
	catch (Exception e)
	{
		e.printStackTrace();
	}

 

That method should be :

 

- load the HTM from the cache in a NpcHtmlMessage (let's say htmToSend).

- initialize a StringBuilder (let's say deathList)

- make the connection and append deathList with content using rs.next().

- use htmToSend.replace("%list%", deathList.toString()));

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

    • Any updated links for this content? 
    • Opening April 25 at 19:00 (UTC +3) Open Beta Test from April 21 This is pre-announcing of NEW season server, so we want to share some key points of it. Full details with road map, patch notes we will announce a bit latter If this is your first time on Dex and you haven’t played on our seasonal servers before, the information below will help you understand what our project is about and its key features. Dex veterans can skip the following section and go straight to the “What’s New in the New Season” part. Why Choose Dex? Best Balance on Interlude+ - we offer the most polished balance among all modified Interlude servers(It may not be perfect yet, but we are committed to continuous improvements and refinements. ). Our build is 100% unique, developed on retail PTS files, and refined over 6+ years. This is not a copy–paste pack – it’s our own work, shaped by players feedback and suggestions for more than 6 years. Proven Stability & Long-Term Life - Our Union x25 server has been running since April 2020 – 6 years of stability and still active with strong online! This makes Dex the only server with real players (not phantoms) with such a setup and longevity. Always Fresh, Always Engaging - Every Seasonal server comes with a clear roadmap of changes and updates. At the end of the season, the server merges with Union, so your effort is never wasted. New players can start fresh together with everyone else on the new season. Before the merge, we run exclusive boosted events for about a month, giving seasonal players a massive head start. (Union players don’t get these events) Endless Endgame Content - High-end activities, unique PvP events, and continuous new features will keep you engaged long-term. We’re always working to improve and deliver fresh, fun content for our community. All your progress, items, and characters are safe - when the season ends, you continue on Union. Main features Modern Classic client (less lags, smoother gameplay, a lot of useful interface features). Anti-bot protection - we use our own system in combine with popular solutions like AAC, so in the end our project have one of the best anti-bot shield exists. Buff book to buff yourself or your summon/pet. With regular buff book you can create only 1 buff profile, if you need more - get the modern buff book and create up to 10 profiles! 36 buff slots - 24 regular buffs, and addictiona 12 slots for Dance/Song Daily rewards - login to the game every day and get rewards. Expanded subclass slots - you can have 5 subclasses from the beginning and expand up to 10. Class/Gender change - you can change your main class and gender if you want. Masterwork items (can be obtained by crafting or farming RBs, have better bonuses than regular items). Item Broker Auctions in towns can sell some epic jewelry and other useful goods for adena (3 times per week). Giran Harbor Fair - daily event which allows you to get rare items for adena. Talents - special tree with passive skills which will help you to tune your class better. Events like TvT and new event WarHunt Epic Replica system. Episodes - we open new content step by step to keep you engaged, bring more fun and extend the game. Episodes reveal following features: Progressive grade unlocks: B-grade is max available at launch → then A-grade opens → later S-grade. Reworked locations: Mithril Mines and Plunderouse Plains Hellbound Island Isle of Preyer, with new content, new Dynasty gear PvP item improvement allows you to improve your items with additional bonuses. Charms can be equipped in one of the special slots that open when wearing a bracelet. Each type of charm grants the wearer certain bonuses New Epic Bosses - Freya, Beleth, Tiat, Trasken Cyclic macros (macros restarts when finishes) What’s New in the Upcoming Season? Below is a brief overview of the main changes coming in the new season, along with short explanations. More detailed information about each feature will be published later, most likely in our wiki. Divisions We plan to test a Division system on Dex, initially only for low-tier epic bosses (AQ, Core, Orfen, Zaken). At the same time as the main Epic Boss respawn, an additional instance version of the boss will appear. Clans from the big war will not be able to enter this instance. The drop table is identical to the main boss, but the Epic Jewelry have not a 100% drop chance. Mithril Mines /data/attachments/4/4662-e7b9c5989ccf81d0b2d48e88b7aa9bc7.jpg A reworked location that will open on the first Monday after S-grade becomes available. In this zone you will be able to: Obtain alternative recipes for S-grade equipment Get your first Charms and upgrade them up to Level 3 Obtain bracelets with 2 Charm slots Farm Void Neolithics (used for upgrade any item to Masterwork, but lose enchant level) 2 New Raid Bosses with valuable drop Fight the Raid Boss Trasken Plunderous Plains /data/attachments/4/4661-2ecd2d0a4702d31c1ba26d4b7e369285.jpg Another reworked location, which will open one week after Mithril Mines. This zone provides: GCM drops LS drop More different Charms 2 New Raid Bosses with valuable drop 3-slot Charm bracelet The ability to make PvP versions of equipment Isle of Prayer A location where players will be able to obtain a new type of equipment - Dynasty. This area will also provide: More different Charms 4-slot Charm bracelet Upgrade charms to level 4 Hellbound Hellbound is now an endgame location. Almost everything can be farmed there, and the drop quality is very high. However, the location will only be available during weeks without Olympiad battles. This means it will be open for one week and closed for the next. This area will also provide: 5-6 slot Charm bracelet bracelet engravement ancient scrolls Best drop GCM Best drop LS More different charms Upgrade charms to level 5 Talents An additional talent tree has been added: the PvE branch. The PvE talent tree has its own limits and does not overlap with the standard tree. Olympiad The Olympiad will now run 5 days per week, from Wednesday to Sunday. Each day you will have a limit on the number of battles you can participate in. War Hunt Event A new event. Players who previously played on Skadi may already be familiar with it. The idea is simple: You enter a PvP zone Killing monsters grants points These points can be exchanged for rewards Killing other players allows you to steal their points PvE / PvP Layers The locations Mithril Mines, Plunderous Plains, IOP and Hellbound will have two separate layers. The drop on both versions are identical. Open World Version: Full PvP zone Instance Version: No PvP zone, works like the regular world with standard war/flag/PK rules Players who enjoy PvP can defend their farming spots and gain extra advantage, while players who prefer a safer farming experience can use the instance version, though with more competition and higher population. As you can see, this season brings quite a lot of changes However, these are mostly content-related additions - the core spirit and classic gameplay of the season remain unchanged. Please note that this is a pre-announcement, and some details may still change before the Beta Test begins. A full roadmap and patch notes will be published later. https://forum.lineage2dex.com/threads/16738/#lg=post-72311&slide=0  
    • Automatic Streamer Rewards System (Twitch / Kick / TikTok) Hey everyone, I’ve developed a Streamer Rewards system for Lineage 2 servers that automatically rewards players who stream the server. The system works fully automatic: Detects if the streamer is currently live Checks if the stream title contains the server name If everything matches, the system sends a custom reward coin to the streamer’s character Rewards are given every 30 minutes while streaming Supported platforms Twitch Kick TikTok Live Configurable options Reward Item ID Reward interval time Server name keyword detection Character name linked to the streamer This makes it easy to encourage players to promote the server without manual work from admins. Example flow: Player goes live on Twitch/Kick/TikTok Stream title includes the server name System detects the stream automatically Every 30 minutes the player receives a reward coin in-game Setup I can also help set up and integrate the system with your server. Works with custom coin rewards Can be configured for different intervals Additional help with installation and configuration available If you're interested or want more details, feel free to send me a PM. I also have a ticket ping system, if new ticket created on the website you can make it send you a ping on discord server for selected roles (support and stuff) but this one is basic and most likely not needed, my discord: zujarka
    • General Trackers :   IPTorrents invite IPTorrents account 1 tb TorrentLeech invite Torrentleech account 1 tb buffer  InTheShaDow ( ITS ) account Acid-lounge invite Torrentday invite Crnaberza account Abn.Lol account Limit-of-eden account Norbits account Xspeeds account Xspeeds invite Bemaniso invite Wigornot account Bithumen invite Filelist account Funfile invite AvistaZ invite Potuk.net invite ResurrectThe.Net invite GrabThe.Info invite Greek-Team invite LinkoManija invite Fano.in account tracker.czech-server.com Speed.cd invite Arab-torrents.net account Arabscene.me account Scenetime account 4thd.xyz invite Btarg.com.ar account Dedbit invite Estone.cc account Speedapp invite Finvip invite Fluxzone account GigaTorrents account Gimmepeers account Haidan.video invite Mojblink account Mycarpathians invite Newinsane.info account Oscarworld.xyz account Peers.FM invite Pt.msg.vg account Ransackedcrew account Redemption invite Scene-rush account Seedfile.io invite Teracod invite Torrent.ai account Torrentmasters invite Ttsweb invite X-files invite X-ite invite Ncore account TorrentHR account Rptorrents account BwTorrents account Superbits invite Krazyzone account Immortalseed account Tntracker invite Pt.eastgame.org account Bitturk account Rstorrent account Tracker.btnext invite Torrent-turk.de account BeiTai.PT account Pt.keepfrds account 52pt.site account Pthome account Torrentseeds account Aystorrent account Blues-brothers.biz invite Divteam account Thesceneplace invite CinemaMovies.pl account Brasiltracker account Patiodebutacas account Newheaven.nl account  Swarmazon.club invite Bc-reloaded account Crazyspirits account Silentground invite Omg.wtftrackr invite Milkie.cc invite Breathetheword invite Madsrevolution account Chilebt account Yubraca account Uniongang.tv account Frboard account Exvagos account Diablotorrent account Microbit account Carp-hunter.hu account Majomparade.eu account Theshinning.me account Youiv.info account Dragonworld-reloaded account Sharewood.tv account Partis.si account Digitalcore.club invite Fuzer.me account R3vuk.wtf invite Ztracker account 1 tb buffer 3changtrai account Best-core.info account Bitsite.us account Eliteunitedcrew invite Exitorrent.org account Tophos invite Torrent.lt account Sktorrent.eu account Oshen account Pirata.digital account Esharenet account Ohmenarikgi.la Pirate-share account Immortuos account Kiesbits account Cliente.amigos-share.club account Broadcity invite Ilovetorzz account Torrentbytes account Polishsource account Portugas account Shareisland account ArabaFenice account Hudbt.hust.edu.cn account Audiences account Nanyangpt account Pt.sjtu.edu.cn account Pt.zhixing.bjtu.edu.cn account Byr.pt invite Ptfiles invite Red-bits account Pt.hdpost.top account Irrenhaus.dyndns.dk (NewPropaganda) account Mnvv2.info (MaxNewVision V2) account 1ptba.com account Spidertk.top account Film-paleis account Generation-free account Aftershock-tracker account Twilightsdreams account Back-ups.me invite Sor-next.tk ( Spirit Of Revolution ) account Tfa.tf ( The Falling Angels ) account Hdmayi account S-f-p.dyndns.dk ( Share Friends Projekt ) account Unlimitz.biz account Pttime account St-tracker.eu account New-retro.eu account Zbbit account Tigers-dl.net account Jptvts.us account Lat-team account Club.hares.top account Falkonvision-team account Concen account Drugari account T.ceskeforum account Peeratiko.org account Zamunda.se account Central-torrent.eu account h-o-d.org account Torrentleech.pl account Demonoid invite Lst.gg account Fakedoor.store account LaidBackManor account Vrbsharezone.co.uk invite Torrenteros account Arenaelite account Datascene account Tracker.0day.community Tapochek.net invite Ptchina invite Lesaloon account Exyusubs account Therebels.tv account Ubits.club invite Zmpt.cc account Turktorrent.us account Dasunerwarte account Hawke.uno account Monikadesign account Fearnopeer account Alpharatio account Wukongwendao.top account Chinapyg account Azusa.wiki account Yggtorrent.top account Torrentdd account Cyanbug.net invite Hhanclub.top account Wintersakura.net account Xthor account Tctg.pm account Finelite invite Agsvpt.com account Pt.0ff.cc invite Qingwapt.com account Xingtan.one account Ptcafe.club invite W-o-t.pro account Coastal-crew.bounceme.net account Darkpeers.org account Pianyuan.org account Seedpool.org  account Tempelbox account Pt.itzmx.com account Itatorrents.xyz  account Letseed.org account The-new-fun.com  account Malayabits.cc account Trellas.me account Yu-scene.net account Futuretorrent.org account Bitpt.cn account Tocashare.biz  account Videoteka.org  account White-angel.hu account Xbytesv2.li account Torr9  account Desitorrents account Okpt.net account Samaritano.cc account Polishtorrent.top  account C411.org account Bigcore.eu account BJ-Share.info account Infinitylibrary.net account Beload.org account Emuwarez.com account Yhpp.cc account Funsharing ( FSC ) account Rastastugan account Tlzdigital account account Upscalevault account Bluraytracker.cz account Torrenting.com account Infire.si account Dasunerwartete.biz invite The-torrent-trader account New-asgard.xyz account Pandapt account Deildu account Tmpt.top invite Pt.gtk.pw account Media.slo-bitcloud.eu account P.t-baozi.cc account 13city.org account Cangbao.ge account Cc.mypt.cc invite Dubhe.site invite Hdbao.cc account Kufei.org invite Mooko.org account Pt.aling.de invite Pt.lajidui.top invite Longpt.org invite Pt.luckpt.de invite Ptlover.cc invite Raingfh.top account Sewerpt.com account   Movies Trackers :   Secret-cinema account Anthelion account Pixelhd account Cinemageddon account Cinemaz account Retroflix account Classix-unlimited - invite Movie-Torrentz (m2g.link) invite Punck-tracker.net account Tmghub account Cathode-ray.tube account Greatposterwall account Arabicsource.net account Upload.cx account Crabpt.vip invite Onlyencodes.cc account Exyusubs account Hellashut.net invite Nordichd.sytes.net invite Locadora.cc account   HD Trackers :   Blutopia buffered account Hd-olimpo buffered account Hdf.world account Torrentland.li account HdSky account Hdchina account Chdbits account Totheglory account Hdroute account Hdhome account TorrentCCF aka et8.org account 3DTorrents invite HD-Torrents account Bit-HDTV account HDME.eu invite Hdarea.co account Asiancinema.me account JoyHD invite HDSpace invite CrazyHD invite Bluebird-hd invite Htpt.cc account Hdtime invite Ourbits.club account Hd4fans account Siambit account Privatehd account Springsunday account Tjupt account Hdcity.leniter invite Ccfbits account Discfan account Pt.btschool.club account Ptsbao.club invite Hdzone.me invite Danishbytes account Zonaq.pw account Tracker.tekno3d account Arabp2p account Hd-united account Reelflix.xyz account Hdatmos.club account Anasch.cc invite Tigris-t account Nethd.org account Hd.ai invite Hitpt.com account Hdmonkey account Dragonhd.xyz account Hdclub.eu account Forum.bluraycd.com account Carpt account Hdfun.me invite Pt.hdupt invite Puntotorrent account Ultrahd account Rousi.zip account Bearbit account Hdturk.club account Asiandvdclub account Star-space.net account Nordicq.org account Hdkyl.in account Utp.to account Hdzero account Novahd account Hdtorrents.eu account 4k3dyptt account Duckboobee.org invite Si-qi.xyz account   Music Trackers :   Dicmusic account Music-Vid account Open.cd account LzTr account ProAudioTorrents invite Jpopsuki invite TranceTraffic invite Audionews invite Kraytracker invite Libble.me invite Losslessclub invite Indietorrents.com invite Dimeadozen account Funkytorrents invite Karaokedl account zombtracker.the-zomb account Concertos account Sugoimusic account Satclubbing.club invite Metal.iplay invite Psyreactor invite Panda.cd account Adamsfile account Freehardmusic account Tracker.hqmusic.vn accouunt Twilightzoom account 3 tb buffer Hiresmusic account Metalguru account Musictorrents.org account Musebootlegs.com invite Zappateers.com account Jungleland.dnsalias.com account Naftamusic account Bemusic account   E-Learning Trackers :   Theplace account Thevault account Myanonamouse account Libranet account 420Project account Learnflakes account Pt.soulvoice.club account P2pelite account Aaaaarg.fail invite Ebooks-shares.org account Abtorrents account Pt.tu88.men invite Docspedia.world invite   TV-Trackers :   Skipthecommercials.xyz account Cryptichaven account TV-Vault invite Shazbat.TV account Myspleen account Tasmanit.es invite Tvstore.me account Tvchaosuk account Jptv.club account   XXX - Porn Trackers :   FemdomCult account Pussytorrents account Adult-cinema-network account Bootytape account 1 Tb buffer Exoticaz account Bitporn account Kufirc account Gaytorrent.ru invite Nicept account Gay-torrents.org invite Ourgtn account Pt.hdbd.us account BitSexy account Happyfappy.org account Kamept.com account Lesbians4u.org account Fappaizuri.me account   Gaming Trackers :   Mteam.fr account BitGamer invite Retrowithin invite Gamegamept account   Cartoon/Anime/Comic Trackers :   Animeworld account Oldtoons.world account U2.dmhy account CartoonChaos invite Mononoke account Totallykids.tv account Bakabt.me invite Revanime account Ansktracker account Tracker.shakaw.com.br invite Bt.mdan.org account Skyey2.com account Animetracker.cc Adbt.it.cx invite Tracker.uniotaku.com account Mousebits.com account   Sports Trackers :   MMA-Tracker invite T3nnis.tv invite AcrossTheTasman account RacingForMe invite Sportscult invite Ultimatewrestlingtorrents account Worldboxingvideoarchive invite CyclingTorrents account Xtremewrestlingtorrents account Tc-boxing invite Mma-torrents account Aussierul invite Xwt-classics account Racing4everyone account Talk.tenyardtracker account Stalker.societyglitch invite Extremebits invite Rgfootball.net account F1carreras.xyz account   Software/Apps Trackers :   Brokenstones account Appzuniverse invite Teamos.xyz account Macbb.org account Phoenixproject.app account Tormac.org account   Graphics Trackers:   Forum.Cgpersia account Cgfxw account   Others   Hduse.net account Fora.snahp.eu account Makingoff.org/forum account Xrel.to account Undergunz.su account Corebay account Endoftheinter.net ( EOTI ) account Thismight.be invite Skull.facefromouter.space account Avxhm.se (AvaxHome) account Ssdforum account Notfake.vip account Intotheinter.net account Tildes.net invite Thetoonz account Usinavirtual account Hdclasico invite HispaShare account Valentine.wtf account Adit-hd account Forum-andr.net account Warezforums account Justanothermusic.site account Forbiddenlibrary.moe account Senturion.to account Movieparadise account Dcdnet.ru account Sftdevils.net account Heavy-r.com account New-team.org account Ddl.tv account Filewarez.club account Hispamula.org account Hubwarez.tv account Ultim-zone.in account Leprosorium.ru account Planet-ultima.org account The-dark-warez.com account Koyi.pub account Tehparadox.net account Forumophilia account Torrentinvite.fr account Gmgard.com account Board4all.biz account   NZB :   Ninjacentral account Tabula-rasa.pw account Drunkenslug account Drunkenslug invite Usenet-4all account Dognzb.cr invite Kleverig account Nzb.cat account Nzbplanet.net invite Ng4you.com account NZB.to account Samuraiplace account Abhdtv.net account Abook.link account Comix.pw account House-of-usenet Secretbinaries.net account Vnext.to account Stockboxx.top account Sky-of-use.net account Indexer.codeshy.com account Oldboys.pw account Uhd100.com account   Prices start from 3 $ to 100 $   Payment methods: Crypto, Neteller, Revolut   If you want to buy something send me a pm or contact me on:   Email: morrison2102@gmail.com   Discord: LFC4LIFE#4173   Telegram: https://t.me/LFC4LIFE4173   Skype: morrison2102@hotmail.com
  • 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..