L2JMobius

PathOfRogue Relic System

shifu · 22 · 7850

Online GuruGel

  • Knight
  • ***
    • Posts: 91
Hello everyone! I am posting a patch fixing bugs in the Relic System. You can read more in the forum thread. It also fixes a bug where an activated relic was applied to all characters in the account. Apply the patch to the version from the repository.

#FIX version 1 (not relevant)
1. Create SQL file and execute in your DB :
Code: [Select]
SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `active_relic`
-- ----------------------------
DROP TABLE IF EXISTS `active_relic`;
CREATE TABLE `active_relic` (
  `charId` int(10) NOT NULL DEFAULT '0',
  `value` int(10) DEFAULT NULL,
  PRIMARY KEY (`charId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
2. Create and apply this DIFF path:
Code: (diff) [Select]
### Eclipse Workspace Patch 1.0
#P L2J_Mobius_12.1_PathOfRogue
diff --git java/org/l2jmobius/gameserver/model/actor/Player.java java/org/l2jmobius/gameserver/model/actor/Player.java
index b3a5b07..6a8061d 100644
--- java/org/l2jmobius/gameserver/model/actor/Player.java
+++ java/org/l2jmobius/gameserver/model/actor/Player.java
@@ -14397,7 +14397,7 @@
  public AccountVariables getAccountVariables()
  {
  final AccountVariables vars = getScript(AccountVariables.class);
- return vars != null ? vars : addScript(new AccountVariables(getAccountName()));
+ return vars != null ? vars : addScript(new AccountVariables(getAccountName(), getObjectId()));
  }
 
  [member=79]override[/member]
@@ -16123,7 +16123,7 @@
  if (holder != null)
  {
  _relics.add(new PlayerRelicData(relicId, relicLevel, relicCount, relicIndex, relicSummonTime));
- giveRelicSkill(holder);
  }
  }
  }
diff --git java/org/l2jmobius/gameserver/model/variables/AccountVariables.java java/org/l2jmobius/gameserver/model/variables/AccountVariables.java
index 7d12f82..cf32bba 100644
--- java/org/l2jmobius/gameserver/model/variables/AccountVariables.java
+++ java/org/l2jmobius/gameserver/model/variables/AccountVariables.java
@@ -20,6 +20,7 @@
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.SQLIntegrityConstraintViolationException;
 import java.util.Map.Entry;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -38,6 +39,10 @@
  private static final String DELETE_QUERY = "DELETE FROM account_gsdata WHERE account_name = ?";
  private static final String INSERT_QUERY = "REPLACE INTO account_gsdata (account_name, var, value) VALUES (?, ?, ?)";
 
+ private static final String SELECT_ACTIVE_RELIC = "SELECT `value` FROM `active_relic` WHERE charId = ?";
+ private static final String INSERT_ACTIVE_RELIC = "INSERT INTO `active_relic` (`charId`, `value`) VALUES (?, ?)";
+ private static final String UPDATE_ACTIVE_RELIC = "UPDATE `active_relic` SET `value`= ? WHERE (`charId`= ?)";
+
  // Public variable names
  public static final String HWID = "HWID";
  public static final String HWIDSLIT_VAR = " ";
@@ -53,10 +58,12 @@
  public static final String UNCONFIRMED_RELICS_COUNT = "UNCONFIRMED_RELICS_COUNT";
 
  private final String _accountName;
+ private final int _charId;
 
- public AccountVariables(String accountName)
+ public AccountVariables(String accountName, int charId)
  {
  _accountName = accountName;
+ _charId = charId;
  restoreMe();
  }
 
@@ -153,4 +160,52 @@
  }
  return true;
  }
+
+ public void setActiveRelic(int relicId)
+ {
+ try (Connection con = DatabaseFactory.getConnection())
+ {
+ try (PreparedStatement st = con.prepareStatement(INSERT_ACTIVE_RELIC))
+ {
+ st.setInt(1, _charId);
+ st.setInt(2, relicId);
+ st.execute();
+ }
+ catch (SQLIntegrityConstraintViolationException e)
+ {
+ PreparedStatement st = con.prepareStatement(UPDATE_ACTIVE_RELIC);
+ st.setInt(1, relicId);
+ st.setInt(2, _charId);
+ st.execute();
+ }
+ }
+ catch (Exception e)
+ {
+ LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't insert active relic for char ID : " + _charId, e);
+ }
+ }
+
+ public int getActiveRelic()
+ {
+ int relic = 0;
+ try (Connection con = DatabaseFactory.getConnection())
+ {
+ try (PreparedStatement st = con.prepareStatement(SELECT_ACTIVE_RELIC))
+ {
+ st.setInt(1, _charId);
+ try (ResultSet rset = st.executeQuery())
+ {
+ if (rset.next())
+ {
+ relic = rset.getInt(1);
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ LOGGER.log(Level.WARNING, getClass().getSimpleName() + ": Couldn't get active relic for char ID : " + _charId, e);
+ }
+ return relic;
+ }
 }
diff --git java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 6b6bd1b..eb9724d 100644
--- java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -65,6 +65,7 @@
 import org.l2jmobius.gameserver.model.clan.Clan;
 import org.l2jmobius.gameserver.model.holders.AttendanceInfoHolder;
 import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
+import org.l2jmobius.gameserver.model.holders.PlayerRelicData;
 import org.l2jmobius.gameserver.model.instancezone.Instance;
 import org.l2jmobius.gameserver.model.item.ItemTemplate;
 import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -148,6 +149,7 @@
 import org.l2jmobius.gameserver.network.serverpackets.olympiad.ExOlympiadInfo;
 import org.l2jmobius.gameserver.network.serverpackets.quest.ExQuestDialog;
 import org.l2jmobius.gameserver.network.serverpackets.quest.ExQuestNotificationAll;
+import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsActiveInfo;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsCollectionInfo;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsExchangeList;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsList;
@@ -807,14 +809,6 @@
  }
  player.sendPacket(new ExCollectionActiveEvent());
 
- // Relic Collections.
- if (Config.RELIC_SYSTEM_ENABLED)
- {
- player.sendPacket(new ExRelicsList(player));
- player.sendPacket(new ExRelicsCollectionInfo(player));
- player.sendPacket(new ExRelicsExchangeList(player));
- }
-
  // Virtual Items
  // TODO: Add a config for this.
  // player.sendPacket(new ExVirtualItemSystemBaseInfo(player));
@@ -979,6 +973,9 @@
 
  // Remove variable used by hunting zone system.
  player.getVariables().remove(PlayerVariables.LAST_HUNTING_ZONE_ID);
+
+ // Relic
+ relicSystem(getPlayer());
  }
 
  /**
@@ -1024,4 +1021,27 @@
  }
  }
  }
+
+ private void relicSystem(Player player)
+ {
+ if (Config.RELIC_SYSTEM_ENABLED)
+ {
+ int activeRelicId = player.getAccountVariables().getActiveRelic();
+ int activeRelicLevel = 0;
+ for (PlayerRelicData relic : player.getRelics())
+ {
+ if (relic.getRelicId() == activeRelicId)
+ {
+ activeRelicId = relic.getRelicId();
+ activeRelicLevel = relic.getRelicLevel();
+ break;
+ }
+ }
+ player.sendPacket(new ExRelicsActiveInfo(activeRelicId, activeRelicLevel)); // Stored active relic from acc var.
+ player.sendPacket(new ExRelicsCollectionInfo(player));
+ player.sendPacket(new ExRelicsList(player)); // Update confirmed relic list relics count.
+ player.sendPacket(new ExRelicsExchangeList(player)); // Update relic exchange/confirm list.
+ }
+ }
+
 }
diff --git java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsActive.java java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsActive.java
index 2bd917a..6f7e566 100644
--- java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsActive.java
+++ java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsActive.java
@@ -27,7 +27,6 @@
 import org.l2jmobius.gameserver.model.holders.PlayerRelicData;
 import org.l2jmobius.gameserver.model.holders.RelicDataHolder;
 import org.l2jmobius.gameserver.model.skill.Skill;
-import org.l2jmobius.gameserver.model.variables.AccountVariables;
 import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsActiveInfo;
 
@@ -65,8 +64,9 @@
  final int skillId = RelicData.getInstance().getRelicSkillId(_relicId);
  final int skillLevel = relicLevel + 1;
  player.sendPacket(new ExRelicsActiveInfo(_relicId, relicLevel));
- player.getAccountVariables().set(AccountVariables.ACTIVE_RELIC, _relicId);
- player.getAccountVariables().storeMe();
+ player.getAccountVariables().setActiveRelic(_relicId);
 
  final Skill relicSkill = SkillData.getInstance().getSkill(skillId, skillLevel);
  if (relicSkill != null)
diff --git java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsOpenUI.java java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsOpenUI.java
index 0f4d0f5..715b525 100644
--- java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsOpenUI.java
+++ java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsOpenUI.java
@@ -21,10 +21,7 @@
 package org.l2jmobius.gameserver.network.clientpackets.relics;
 
 import org.l2jmobius.gameserver.model.actor.Player;
-import org.l2jmobius.gameserver.model.holders.PlayerRelicData;
-import org.l2jmobius.gameserver.model.variables.AccountVariables;
 import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
-import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsActiveInfo;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsExchangeList;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsList;
 
@@ -47,21 +44,6 @@
  return;
  }
 
- int activeRelicId = 0;
- int activeRelicLevel = 0;
- for (PlayerRelicData relic : player.getRelics())
- {
- if (relic.getRelicId() == player.getAccountVariables().getInt(AccountVariables.ACTIVE_RELIC, 0))
- {
- activeRelicId = relic.getRelicId();
- activeRelicLevel = relic.getRelicLevel();
- break;
- }
- }
- player.sendPacket(new ExRelicsActiveInfo(activeRelicId, activeRelicLevel)); // Show stored active relic from acc var.
- player.getAccountVariables().set(AccountVariables.ACTIVE_RELIC, activeRelicId);
- player.getAccountVariables().storeMe();
-
  player.sendPacket(new ExRelicsList(player)); // Update confirmed relic list relics count.
  player.sendPacket(new ExRelicsExchangeList(player)); // Update relic exchange/confirm list.
  }

after this update, but the error does not always appear.


Offline shifu

  • Knight
  • ***
    • Posts: 81
  • Patria o Muerte

Try to reverse the patch or use the compilation from the repository. The error may repeat without a patch. At the moment I have not found a dependency between the error and the patch.
P.S. Use patch version 3


Online Mobius

  • Distinguished King
  • *****
    • Posts: 19655
This is wrong.
Account variables should not be linked with character object id.


Offline shifu

  • Knight
  • ***
    • Posts: 81
  • Patria o Muerte
#FIX version 3 (with character variables)
- Create and apply this DIFF path:
Code: (diff) [Select]
diff --git java/org/l2jmobius/gameserver/model/actor/Player.java java/org/l2jmobius/gameserver/model/actor/Player.java
index b3a5b07..d2ad8c5 100644
--- java/org/l2jmobius/gameserver/model/actor/Player.java
+++ java/org/l2jmobius/gameserver/model/actor/Player.java
@@ -16123,7 +16123,6 @@
  if (holder != null)
  {
  _relics.add(new PlayerRelicData(relicId, relicLevel, relicCount, relicIndex, relicSummonTime));
- giveRelicSkill(holder);
  }
  }
  }
diff --git java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 6b6bd1b..075b5ab 100644
--- java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -65,6 +65,7 @@
 import org.l2jmobius.gameserver.model.clan.Clan;
 import org.l2jmobius.gameserver.model.holders.AttendanceInfoHolder;
 import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
+import org.l2jmobius.gameserver.model.holders.PlayerRelicData;
 import org.l2jmobius.gameserver.model.instancezone.Instance;
 import org.l2jmobius.gameserver.model.item.ItemTemplate;
 import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -148,6 +149,7 @@
 import org.l2jmobius.gameserver.network.serverpackets.olympiad.ExOlympiadInfo;
 import org.l2jmobius.gameserver.network.serverpackets.quest.ExQuestDialog;
 import org.l2jmobius.gameserver.network.serverpackets.quest.ExQuestNotificationAll;
+import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsActiveInfo;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsCollectionInfo;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsExchangeList;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsList;
@@ -807,14 +809,6 @@
  }
  player.sendPacket(new ExCollectionActiveEvent());
 
- // Relic Collections.
- if (Config.RELIC_SYSTEM_ENABLED)
- {
- player.sendPacket(new ExRelicsList(player));
- player.sendPacket(new ExRelicsCollectionInfo(player));
- player.sendPacket(new ExRelicsExchangeList(player));
- }
-
  // Virtual Items
  // TODO: Add a config for this.
  // player.sendPacket(new ExVirtualItemSystemBaseInfo(player));
@@ -979,6 +973,9 @@
 
  // Remove variable used by hunting zone system.
  player.getVariables().remove(PlayerVariables.LAST_HUNTING_ZONE_ID);
+
+ // Relic
+ relicSystem(getPlayer());
  }
 
  /**
@@ -1024,4 +1021,27 @@
  }
  }
  }
+
+ private void relicSystem(Player player)
+ {
+ if (Config.RELIC_SYSTEM_ENABLED)
+ {
+ int activeRelicId = player.getVariables().getInt(AccountVariables.ACTIVE_RELIC, 0);
+ int activeRelicLevel = 0;
+ for (PlayerRelicData relic : player.getRelics())
+ {
+ if (relic.getRelicId() == activeRelicId)
+ {
+ activeRelicId = relic.getRelicId();
+ activeRelicLevel = relic.getRelicLevel();
+ break;
+ }
+ }
+ player.sendPacket(new ExRelicsActiveInfo(activeRelicId, activeRelicLevel)); // Stored active relic from acc var.
+ player.sendPacket(new ExRelicsCollectionInfo(player));
+ player.sendPacket(new ExRelicsList(player)); // Update confirmed relic list relics count.
+ player.sendPacket(new ExRelicsExchangeList(player)); // Update relic exchange/confirm list.
+ }
+ }
+
 }
diff --git java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsActive.java java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsActive.java
index 2bd917a..0383eb3 100644
--- java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsActive.java
+++ java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsActive.java
@@ -65,8 +65,7 @@
  final int skillId = RelicData.getInstance().getRelicSkillId(_relicId);
  final int skillLevel = relicLevel + 1;
  player.sendPacket(new ExRelicsActiveInfo(_relicId, relicLevel));
- player.getAccountVariables().set(AccountVariables.ACTIVE_RELIC, _relicId);
- player.getAccountVariables().storeMe();
+ player.getVariables().set(AccountVariables.ACTIVE_RELIC, _relicId);
 
  final Skill relicSkill = SkillData.getInstance().getSkill(skillId, skillLevel);
  if (relicSkill != null)
diff --git java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsOpenUI.java java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsOpenUI.java
index 0f4d0f5..715b525 100644
--- java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsOpenUI.java
+++ java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsOpenUI.java
@@ -21,10 +21,7 @@
 package org.l2jmobius.gameserver.network.clientpackets.relics;
 
 import org.l2jmobius.gameserver.model.actor.Player;
-import org.l2jmobius.gameserver.model.holders.PlayerRelicData;
-import org.l2jmobius.gameserver.model.variables.AccountVariables;
 import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
-import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsActiveInfo;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsExchangeList;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsList;
 
@@ -47,21 +44,6 @@
  return;
  }
 
- int activeRelicId = 0;
- int activeRelicLevel = 0;
- for (PlayerRelicData relic : player.getRelics())
- {
- if (relic.getRelicId() == player.getAccountVariables().getInt(AccountVariables.ACTIVE_RELIC, 0))
- {
- activeRelicId = relic.getRelicId();
- activeRelicLevel = relic.getRelicLevel();
- break;
- }
- }
- player.sendPacket(new ExRelicsActiveInfo(activeRelicId, activeRelicLevel)); // Show stored active relic from acc var.
- player.getAccountVariables().set(AccountVariables.ACTIVE_RELIC, activeRelicId);
- player.getAccountVariables().storeMe();
-
  player.sendPacket(new ExRelicsList(player)); // Update confirmed relic list relics count.
  player.sendPacket(new ExRelicsExchangeList(player)); // Update relic exchange/confirm list.
  }


Online GuruGel

  • Knight
  • ***
    • Posts: 91
#FIX version 3 (with character variables)
- Create and apply this DIFF path:
Code: (diff) [Select]
diff --git java/org/l2jmobius/gameserver/model/actor/Player.java java/org/l2jmobius/gameserver/model/actor/Player.java
index b3a5b07..d2ad8c5 100644
--- java/org/l2jmobius/gameserver/model/actor/Player.java
+++ java/org/l2jmobius/gameserver/model/actor/Player.java
@@ -16123,7 +16123,6 @@
  if (holder != null)
  {
  _relics.add(new PlayerRelicData(relicId, relicLevel, relicCount, relicIndex, relicSummonTime));
- giveRelicSkill(holder);
  }
  }
  }
diff --git java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
index 6b6bd1b..075b5ab 100644
--- java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
+++ java/org/l2jmobius/gameserver/network/clientpackets/EnterWorld.java
@@ -65,6 +65,7 @@
 import org.l2jmobius.gameserver.model.clan.Clan;
 import org.l2jmobius.gameserver.model.holders.AttendanceInfoHolder;
 import org.l2jmobius.gameserver.model.holders.ClientHardwareInfoHolder;
+import org.l2jmobius.gameserver.model.holders.PlayerRelicData;
 import org.l2jmobius.gameserver.model.instancezone.Instance;
 import org.l2jmobius.gameserver.model.item.ItemTemplate;
 import org.l2jmobius.gameserver.model.item.instance.Item;
@@ -148,6 +149,7 @@
 import org.l2jmobius.gameserver.network.serverpackets.olympiad.ExOlympiadInfo;
 import org.l2jmobius.gameserver.network.serverpackets.quest.ExQuestDialog;
 import org.l2jmobius.gameserver.network.serverpackets.quest.ExQuestNotificationAll;
+import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsActiveInfo;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsCollectionInfo;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsExchangeList;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsList;
@@ -807,14 +809,6 @@
  }
  player.sendPacket(new ExCollectionActiveEvent());
 
- // Relic Collections.
- if (Config.RELIC_SYSTEM_ENABLED)
- {
- player.sendPacket(new ExRelicsList(player));
- player.sendPacket(new ExRelicsCollectionInfo(player));
- player.sendPacket(new ExRelicsExchangeList(player));
- }
-
  // Virtual Items
  // TODO: Add a config for this.
  // player.sendPacket(new ExVirtualItemSystemBaseInfo(player));
@@ -979,6 +973,9 @@
 
  // Remove variable used by hunting zone system.
  player.getVariables().remove(PlayerVariables.LAST_HUNTING_ZONE_ID);
+
+ // Relic
+ relicSystem(getPlayer());
  }
 
  /**
@@ -1024,4 +1021,27 @@
  }
  }
  }
+
+ private void relicSystem(Player player)
+ {
+ if (Config.RELIC_SYSTEM_ENABLED)
+ {
+ int activeRelicId = player.getVariables().getInt(AccountVariables.ACTIVE_RELIC, 0);
+ int activeRelicLevel = 0;
+ for (PlayerRelicData relic : player.getRelics())
+ {
+ if (relic.getRelicId() == activeRelicId)
+ {
+ activeRelicId = relic.getRelicId();
+ activeRelicLevel = relic.getRelicLevel();
+ break;
+ }
+ }
+ player.sendPacket(new ExRelicsActiveInfo(activeRelicId, activeRelicLevel)); // Stored active relic from acc var.
+ player.sendPacket(new ExRelicsCollectionInfo(player));
+ player.sendPacket(new ExRelicsList(player)); // Update confirmed relic list relics count.
+ player.sendPacket(new ExRelicsExchangeList(player)); // Update relic exchange/confirm list.
+ }
+ }
+
 }
diff --git java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsActive.java java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsActive.java
index 2bd917a..0383eb3 100644
--- java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsActive.java
+++ java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsActive.java
@@ -65,8 +65,7 @@
  final int skillId = RelicData.getInstance().getRelicSkillId(_relicId);
  final int skillLevel = relicLevel + 1;
  player.sendPacket(new ExRelicsActiveInfo(_relicId, relicLevel));
- player.getAccountVariables().set(AccountVariables.ACTIVE_RELIC, _relicId);
- player.getAccountVariables().storeMe();
+ player.getVariables().set(AccountVariables.ACTIVE_RELIC, _relicId);
 
  final Skill relicSkill = SkillData.getInstance().getSkill(skillId, skillLevel);
  if (relicSkill != null)
diff --git java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsOpenUI.java java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsOpenUI.java
index 0f4d0f5..715b525 100644
--- java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsOpenUI.java
+++ java/org/l2jmobius/gameserver/network/clientpackets/relics/RequestRelicsOpenUI.java
@@ -21,10 +21,7 @@
 package org.l2jmobius.gameserver.network.clientpackets.relics;
 
 import org.l2jmobius.gameserver.model.actor.Player;
-import org.l2jmobius.gameserver.model.holders.PlayerRelicData;
-import org.l2jmobius.gameserver.model.variables.AccountVariables;
 import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
-import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsActiveInfo;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsExchangeList;
 import org.l2jmobius.gameserver.network.serverpackets.relics.ExRelicsList;
 
@@ -47,21 +44,6 @@
  return;
  }
 
- int activeRelicId = 0;
- int activeRelicLevel = 0;
- for (PlayerRelicData relic : player.getRelics())
- {
- if (relic.getRelicId() == player.getAccountVariables().getInt(AccountVariables.ACTIVE_RELIC, 0))
- {
- activeRelicId = relic.getRelicId();
- activeRelicLevel = relic.getRelicLevel();
- break;
- }
- }
- player.sendPacket(new ExRelicsActiveInfo(activeRelicId, activeRelicLevel)); // Show stored active relic from acc var.
- player.getAccountVariables().set(AccountVariables.ACTIVE_RELIC, activeRelicId);
- player.getAccountVariables().storeMe();
-
  player.sendPacket(new ExRelicsList(player)); // Update confirmed relic list relics count.
  player.sendPacket(new ExRelicsExchangeList(player)); // Update relic exchange/confirm list.
  }

I don't know about others, but I like the second version better... It puts less load on the server and database.


Online gigilo1968

  • Black Sheep
  • Baron
  • *****
    • Posts: 206
    • Hi5
In diff V3 - Not need Edit queries: SELECT_ACTIVE_RELIC /  INSERT_ACTIVE_RELIC / UPDATE_ACTIVE_RELIC ?  ;)


Offline shifu

  • Knight
  • ***
    • Posts: 81
  • Patria o Muerte
In diff V3 - Not need Edit queries: SELECT_ACTIVE_RELIC /  INSERT_ACTIVE_RELIC / UPDATE_ACTIVE_RELIC ?  ;)
When working with variables, you can do without them. The existing queries in the source code are used. Which simplified the patch.  ;)