Autor Tema: Mana potion bug  (Leído 68 veces)

andres14

  • Jr. Member
  • **
  • Mensajes: 61
  • Karma: +0/-0
    • Ver Perfil
Mana potion bug
« en: Octubre 14, 2018, 04:17:57 pm »
Al usar repetidas veces muy rapido las potas de mp agarra un bug al personaje,queda petrificado en estado de combate y solo se puede salir del juego cerrandolo desde administrador de tareas,creo que el problema es que no tienen delay
« Última modificación: Octubre 16, 2018, 04:18:21 pm por fissban »

fissban

  • Administrador
  • Full Member
  • *
  • Mensajes: 196
  • Karma: +0/-0
    • Ver Perfil
Re:Mana potion bug
« Respuesta #1 en: Octubre 15, 2018, 01:53:13 pm »
se pueden hacen varias cosas en este caso, podemos poner un flood protector para evitar el abuso q es casi lo mismo que ponerle delay, otra opcion seria modificar en "options.properties" el config "ThreadsPerInstantThreadPool" aunque no estoy seguro si sea solucion pero seria lo primero en probar.

Creo que por default pondre delay a todas las pots para evitar este tema :S

andres14

  • Jr. Member
  • **
  • Mensajes: 61
  • Karma: +0/-0
    • Ver Perfil
Re:Mana potion bug
« Respuesta #2 en: Octubre 15, 2018, 02:47:42 pm »
Si seria lo mejor,aunque sea de 1 seg y podrías poner un config para poder editarlo sin entrar al core

fissban

  • Administrador
  • Full Member
  • *
  • Mensajes: 196
  • Karma: +0/-0
    • Ver Perfil
Re:Mana potion bug
« Respuesta #3 en: Octubre 15, 2018, 03:33:18 pm »
proba este parche y veamos si te sigue dando problemas al abusar de las pots.

Código
Index: dist/game/config/security.properties
===================================================================
--- dist/game/config/security.properties (revision 1128)
+++ dist/game/config/security.properties (working copy)
@@ -67,11 +67,11 @@
 # <font color=FFFF00>Default</font> = 50
 floodProtectorInitialSize = 50
 
-# Reuse delays for protected actions (in milliseconds)
+# Reuse delays for protected item (in milliseconds)
 # <font color=FFFF00>Default</font> = 100
 floodProtectorItem = 100
 
-# Reuse delays for protected actions (in milliseconds)
+# Reuse delays for protected roll dice (in milliseconds)
 # <font color=FFFF00>Default</font> = 4200
 floodProtectorRollDice = 4200
 
@@ -79,30 +79,34 @@
 # <font color=FFFF00>Default</font> = 4200
 floodProtectorFireWork = 4200
 
-# Reuse delays for protected actions (in milliseconds)
+# Reuse delays for protected pet summon (in milliseconds)
 # <font color=FFFF00>Default</font> = 1600
 floodProtectorItemPetSummon = 1600
 
-# Reuse delays for protected actions (in milliseconds)
+# Reuse delays for protected hero voice (in milliseconds)
 # <font color=FFFF00>Default</font> = 5000
 floodProtectorHeroVoice = 5000
 
-# Reuse delays for protected actions (in milliseconds)
+# Reuse delays for protected global chat (in milliseconds)
 # <font color=FFFF00>Default</font> = 5000
 floodProtectorGlobalChat = 5000
 
-# Reuse delays for protected actions (in milliseconds)
+# Reuse delays for protected multisell (in milliseconds)
 # <font color=FFFF00>Default</font> = 1000
 floodProtectorMultiSell = 1000
 
-# Reuse delays for protected actions (in milliseconds)
+# Reuse delays for protected subclass (in milliseconds)
 # <font color=FFFF00>Default</font> = 2000
 floodProtectorSubClass = 2000
 
-# Reuse delays for protected actions (in milliseconds)
+# Reuse delays for protected drop item (in milliseconds)
 # <font color=FFFF00>Default</font> = 1000
 floodProtectorDropItem = 1000
 
-# Reuse delays for protected actions (in milliseconds)
+# Reuse delays for protected bypass (in milliseconds)
 # <font color=FFFF00>Default</font> = 500
-floodProtectorBypass = 500
\ No newline at end of file
+floodProtectorBypass = 500
+
+# Reuse delays for protected actions (in milliseconds)
+# <font color=FFFF00>Default</font> = 200
+floodProtectorPotion = 200
\ No newline at end of file
Index: java/net/sf/l2j/Config.java
===================================================================
--- java/net/sf/l2j/Config.java (revision 1148)
+++ java/net/sf/l2j/Config.java (working copy)
@@ -595,6 +595,7 @@
  public static int PROTECTED_SUBCLASS;
  public static int PROTECTED_DROPITEM;
  public static int PROTECTED_BYPASS;
+ public static int PROTECTED_POTION;
 
  // ------------------------------------------------ //
  // XXX GM
@@ -2470,7 +2471,7 @@
  LOG_ITEMS = config.getBoolean("LogItems", false);
  GMAUDIT = config.getBoolean("GMAudit", false);
  ILLEGAL_ACTION_AUDIT = config.getBoolean("IllegalActionAudit", false);
- FLOODPROTECTOR_INITIALSIZE = config.getInteger("floodProtectorInitialSize", 5000);
+ FLOODPROTECTOR_INITIALSIZE = config.getInteger("floodProtectorInitialSize", 50);
  PROTECTED_ROLLDICE = config.getInteger("floodProtectorRollDice", 4200);
  PROTECTED_FIREWORK = config.getInteger("floodProtectorFireWork", 4200);
  PROTECTED_ITEMPETSUMMON = config.getInteger("floodProtectorItemPetSummon", 1600);
@@ -2480,6 +2481,7 @@
  PROTECTED_SUBCLASS = config.getInteger("floodProtectorSubClass", 2000);
  PROTECTED_DROPITEM = config.getInteger("floodProtectorDropItem", 1000);
  PROTECTED_BYPASS = config.getInteger("floodProtectorBypass", 500);
+ PROTECTED_POTION = config.getInteger("floodProtectorPotion", 200);
  }
 
  /**
Index: java/net/sf/l2j/gameserver/floodprotector/FloodProtector.java
===================================================================
--- java/net/sf/l2j/gameserver/floodprotector/FloodProtector.java (revision 1128)
+++ java/net/sf/l2j/gameserver/floodprotector/FloodProtector.java (working copy)
@@ -6,6 +6,7 @@
 
 import net.sf.l2j.Config;
 import net.sf.l2j.gameserver.floodprotector.enums.FloodProtectorType;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 
 /**
  * Flood protector
@@ -15,7 +16,7 @@
 {
  private static final Logger LOG = Logger.getLogger(FloodProtector.class.getName());
 
- private final Map<Integer, long[]> floodClient;
+ private final Map<Integer, long[]> players;
 
  // reuse delays for protected actions (in game ticks 1 tick = 100ms)
  private static final int[] REUSEDELAY =
@@ -29,34 +30,32 @@
  Config.PROTECTED_SUBCLASS,
  Config.PROTECTED_DROPITEM,
  Config.PROTECTED_BYPASS,
+ Config.PROTECTED_POTION,
  };
 
  public FloodProtector()
  {
  LOG.info("Initializing FloodProtector");
- floodClient = new ConcurrentHashMap<>(Config.FLOODPROTECTOR_INITIALSIZE);
+ players = new ConcurrentHashMap<>(Config.FLOODPROTECTOR_INITIALSIZE);
  }
 
  /**
  * Add a new player to the flood protector (should be done for all players when they enter the world)
- * @param playerObjId
+ * @param player
  */
- public void registerNewPlayer(int playerObjId)
+ public void registerNewPlayer(L2PcInstance player)
  {
- // create a new array
- long[] array = new long[REUSEDELAY.length];
-
  // register the player with an empty array
- floodClient.put(playerObjId, array);
+ players.put(player.getObjectId(), new long[REUSEDELAY.length]);
  }
 
  /**
  * Remove a player from the flood protector (should be done if player loggs off)
- * @param playerObjId
+ * @param player
  */
- public void removePlayer(int playerObjId)
+ public void removePlayer(L2PcInstance player)
  {
- floodClient.remove(playerObjId);
+ players.remove(player.getObjectId());
  }
 
  /**
@@ -64,23 +63,20 @@
  */
  public int getSize()
  {
- return floodClient.size();
+ return players.size();
  }
 
  /**
  * Try to perform the requested action
- * @param playerObjId
+ * @param player
  * @param action
  * @return true if the action may be performed
  */
- public boolean tryPerformAction(int playerObjId, FloodProtectorType action)
+ public boolean tryPerformAction(L2PcInstance player, FloodProtectorType action)
  {
- long[] value = floodClient.get(playerObjId);
-
- if (value[action.ordinal()] < System.currentTimeMillis())
+ if (players.get(player.getObjectId())[action.ordinal()] < System.currentTimeMillis())
  {
- value[action.ordinal()] = System.currentTimeMillis() + REUSEDELAY[action.ordinal()];
- floodClient.put(playerObjId, value);
+ players.get(player.getObjectId())[action.ordinal()] = System.currentTimeMillis() + REUSEDELAY[action.ordinal()];
  return true;
  }
  return false;
Index: java/net/sf/l2j/gameserver/floodprotector/enums/FloodProtectorType.java
===================================================================
--- java/net/sf/l2j/gameserver/floodprotector/enums/FloodProtectorType.java (revision 1128)
+++ java/net/sf/l2j/gameserver/floodprotector/enums/FloodProtectorType.java (working copy)
@@ -5,13 +5,14 @@
  */
 public enum FloodProtectorType
 {
- PROTECTED_ROLLDICE,
- PROTECTED_FIREWORK,
- PROTECTED_ITEMPETSUMMON,
- PROTECTED_HEROVOICE,
- PROTECTED_GLOBALCHAT,
- PROTECTED_MULTISELL,
- PROTECTED_SUBCLASS,
- PROTECTED_DROPITEM,
- PROTECTED_BYPASS,
+ ROLLDICE,
+ FIREWORK,
+ ITEM_PET_SUMMON,
+ HERO_VOICE,
+ GLOBAL_CHAT,
+ MULTISELL,
+ SUBCLASS,
+ DROP_ITEM,
+ BYPASS,
+ POTION
 }
Index: java/net/sf/l2j/gameserver/handler/item/ItemFirework.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/item/ItemFirework.java (revision 1128)
+++ java/net/sf/l2j/gameserver/handler/item/ItemFirework.java (working copy)
@@ -39,7 +39,7 @@
  L2PcInstance activeChar = (L2PcInstance) playable;
  int itemId = item.getId();
 
- if (!FloodProtector.getInstance().tryPerformAction(activeChar.getObjectId(), FloodProtectorType.PROTECTED_FIREWORK))
+ if (!FloodProtector.getInstance().tryPerformAction(activeChar, FloodProtectorType.FIREWORK))
  {
  activeChar.sendPacket(new SystemMessage(SystemMessage.S1_CANNOT_BE_USED).addItemName(itemId));
  return;
Index: java/net/sf/l2j/gameserver/handler/item/ItemPotions.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/item/ItemPotions.java (revision 1128)
+++ java/net/sf/l2j/gameserver/handler/item/ItemPotions.java (working copy)
@@ -3,6 +3,8 @@
 import java.util.List;
 
 import net.sf.l2j.gameserver.data.SkillData;
+import net.sf.l2j.gameserver.floodprotector.FloodProtector;
+import net.sf.l2j.gameserver.floodprotector.enums.FloodProtectorType;
 import net.sf.l2j.gameserver.handler.ItemHandler.IItemHandler;
 import net.sf.l2j.gameserver.handler.SkillHandler;
 import net.sf.l2j.gameserver.handler.SkillHandler.ISkillHandler;
@@ -72,6 +74,12 @@
 
  int itemId = item.getId();
 
+ if (!FloodProtector.getInstance().tryPerformAction(activeChar, FloodProtectorType.POTION))
+ {
+ activeChar.sendPacket(new SystemMessage(SystemMessage.S1_CANNOT_BE_USED).addItemName(itemId));
+ return;
+ }
+
  switch (itemId)
  {
  case 65:
Index: java/net/sf/l2j/gameserver/handler/item/ItemRollingDice.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/item/ItemRollingDice.java (revision 1128)
+++ java/net/sf/l2j/gameserver/handler/item/ItemRollingDice.java (working copy)
@@ -47,14 +47,14 @@
  return;
  }
 
- int number = Rnd.get(1, 6);
-
- if (!FloodProtector.getInstance().tryPerformAction(activeChar.getObjectId(), FloodProtectorType.PROTECTED_ROLLDICE))
+ if (!FloodProtector.getInstance().tryPerformAction(activeChar, FloodProtectorType.ROLLDICE))
  {
  activeChar.sendPacket(new SystemMessage(SystemMessage.YOU_MAY_NOT_THROW_THE_DICE_AT_THIS_TIME_TRY_AGAIN_LATER));
  return;
  }
 
+ int number = Rnd.get(1, 6);
+
  Broadcast.toSelfAndKnownPlayers(activeChar, new Dice(activeChar, item.getId(), number, activeChar.getX() - 30, activeChar.getY() - 30, activeChar.getZ()));
 
  SystemMessage sm = new SystemMessage(SystemMessage.C1_ROLLED_S2).addString(activeChar.getName()).addNumber(number);
Index: java/net/sf/l2j/gameserver/handler/item/ItemSummonItems.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/item/ItemSummonItems.java (revision 1128)
+++ java/net/sf/l2j/gameserver/handler/item/ItemSummonItems.java (working copy)
@@ -42,7 +42,7 @@
 
  L2PcInstance activeChar = (L2PcInstance) playable;
 
- if (!FloodProtector.getInstance().tryPerformAction(activeChar.getObjectId(), FloodProtectorType.PROTECTED_ITEMPETSUMMON))
+ if (!FloodProtector.getInstance().tryPerformAction(activeChar, FloodProtectorType.ITEM_PET_SUMMON))
  {
  return;
  }
Index: java/net/sf/l2j/gameserver/handler/say/SayHeroe.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/say/SayHeroe.java (revision 1128)
+++ java/net/sf/l2j/gameserver/handler/say/SayHeroe.java (working copy)
@@ -28,7 +28,7 @@
  {
  if (activeChar.isHero())
  {
- if (!FloodProtector.getInstance().tryPerformAction(activeChar.getObjectId(), FloodProtectorType.PROTECTED_HEROVOICE))
+ if (!FloodProtector.getInstance().tryPerformAction(activeChar, FloodProtectorType.HERO_VOICE))
  {
  activeChar.sendMessage("Do not spam heroe channel.");
  return;
Index: java/net/sf/l2j/gameserver/handler/say/SayShout.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/say/SayShout.java (revision 1130)
+++ java/net/sf/l2j/gameserver/handler/say/SayShout.java (working copy)
@@ -27,7 +27,7 @@
  @Override
  public void handleSay(SayType type, L2PcInstance activeChar, String target, String text)
  {
- if (!FloodProtector.getInstance().tryPerformAction(activeChar.getObjectId(), FloodProtectorType.PROTECTED_GLOBALCHAT))
+ if (!FloodProtector.getInstance().tryPerformAction(activeChar, FloodProtectorType.GLOBAL_CHAT))
  {
  activeChar.sendMessage("Do not spam shout channel.");
  return;
Index: java/net/sf/l2j/gameserver/handler/say/SayTrade.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/say/SayTrade.java (revision 1130)
+++ java/net/sf/l2j/gameserver/handler/say/SayTrade.java (working copy)
@@ -27,7 +27,7 @@
  @Override
  public void handleSay(SayType type, L2PcInstance activeChar, String target, String text)
  {
- if (!FloodProtector.getInstance().tryPerformAction(activeChar.getObjectId(), FloodProtectorType.PROTECTED_GLOBALCHAT))
+ if (!FloodProtector.getInstance().tryPerformAction(activeChar, FloodProtectorType.GLOBAL_CHAT))
  {
  activeChar.sendMessage("Do not spam trade channel.");
  return;
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 1130)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -5972,7 +5972,7 @@
  setConnection(null);
 
  // Remove from flood protector
- FloodProtector.getInstance().removePlayer(getObjectId());
+ FloodProtector.getInstance().removePlayer(this);
 
  if (getClanId() > 0)
  {
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2VillageMasterInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2VillageMasterInstance.java (revision 1128)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2VillageMasterInstance.java (working copy)
@@ -293,7 +293,7 @@
  * If the character is less than level 75 on any of their previously chosen classes then disallow them to change to their most recently added sub-class choice.
  */
 
- if (!FloodProtector.getInstance().tryPerformAction(player.getObjectId(), FloodProtectorType.PROTECTED_SUBCLASS))
+ if (!FloodProtector.getInstance().tryPerformAction(player, FloodProtectorType.SUBCLASS))
  {
  LOG.warning("Player " + player.getName() + " has performed a subclass change too fast.");
  return;
@@ -358,7 +358,7 @@
  * If the character is less than level 75 on any of their previously chosen classes then disallow them to change to their most recently added sub-class choice. Note: paramOne = classIndex
  */
 
- if (!FloodProtector.getInstance().tryPerformAction(player.getObjectId(), FloodProtectorType.PROTECTED_SUBCLASS))
+ if (!FloodProtector.getInstance().tryPerformAction(player, FloodProtectorType.SUBCLASS))
  {
  LOG.warning("Player " + player.getName() + " has performed a subclass change too fast");
  return;
@@ -392,7 +392,7 @@
  /*
  * Warning: the information about this subclass will be removed from the subclass list even if false!
  */
- if (!FloodProtector.getInstance().tryPerformAction(player.getObjectId(), FloodProtectorType.PROTECTED_SUBCLASS))
+ if (!FloodProtector.getInstance().tryPerformAction(player, FloodProtectorType.SUBCLASS))
  {
  LOG.warning("Player " + player.getName() + " has performed a subclass change too fast");
  return;
@@ -670,8 +670,9 @@
  PlayerClass currClass = PlayerClass.values()[charClassId];
 
  /**
- * If the race of your main class is Elf or Dark Elf, you may not select each class as a subclass to the other class, and you may not select Overlord and Warsmith class as a subclass. You may not select a similar class as the subclass. The occupations classified as similar classes are as follows:
- * Treasure Hunter, Plainswalker and Abyss Walker Hawkeye, Silver Ranger and Phantom Ranger Paladin, Dark Avenger, Temple Knight and Shillien Knight Warlocks, Elemental Summoner and Phantom Summoner Elder and Shillien Elder Swordsinger and Bladedancer Sorcerer, Spellsinger and Spellhowler
+ * If the race of your main class is Elf or Dark Elf, you may not select each class as a subclass to the other class, and you may not select Overlord and Warsmith class as a subclass. You may not select a similar class as the subclass. The occupations classified as similar classes are as
+ * follows: Treasure Hunter, Plainswalker and Abyss Walker Hawkeye, Silver Ranger and Phantom Ranger Paladin, Dark Avenger, Temple Knight and Shillien Knight Warlocks, Elemental Summoner and Phantom Summoner Elder and Shillien Elder Swordsinger and Bladedancer Sorcerer, Spellsinger and
+ * Spellhowler
  */
  Set<PlayerClass> availSubs = currClass.getAvailableSubclasses(player);
 
Index: java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
===================================================================
--- java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java (revision 1128)
+++ java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java (working copy)
@@ -83,7 +83,7 @@
  }
 
  // Register in flood protector
- FloodProtector.getInstance().registerNewPlayer(activeChar.getObjectId());
+ FloodProtector.getInstance().registerNewPlayer(activeChar);
 
  if (L2World.getInstance().findObject(activeChar.getObjectId()) != null)
  {
Index: java/net/sf/l2j/gameserver/network/clientpackets/MultiSellChoose.java
===================================================================
--- java/net/sf/l2j/gameserver/network/clientpackets/MultiSellChoose.java (revision 1128)
+++ java/net/sf/l2j/gameserver/network/clientpackets/MultiSellChoose.java (working copy)
@@ -76,7 +76,7 @@
  return;
  }
 
- if (!FloodProtector.getInstance().tryPerformAction(player.getObjectId(), FloodProtectorType.PROTECTED_MULTISELL))
+ if (!FloodProtector.getInstance().tryPerformAction(player, FloodProtectorType.MULTISELL))
  {
  return;
  }
@@ -251,13 +251,13 @@
  // b) enchantment is not maintained. Get the instances with the LOWEST enchantment level
  {
  /*
- * NOTE: There are 2 ways to achieve the above goal. 1) Get all items that have the correct itemId, loop through them until the lowest enchantment level is found. Repeat all this for the next item until proper count of items is reached. 2) Get all items that have the correct itemId, sort them once
- * based on enchantment level, and get the range of items that is necessary. Method 1 is faster for a small number of items to be exchanged. Method 2 is faster for large amounts. EXPLANATION: Worst case scenario for algorithm 1 will make it run in a number of cycles given by: m*(2n-m+1)/2 where m is
- * the number of items to be exchanged and n is the total number of inventory items that have a matching id. With algorithm 2 (sort), sorting takes n*log(n) time and the choice is done in a single cycle for case b (just grab the m first items) or in linear time for case a (find the beginning of
- * items with correct enchantment, index x, and take all items from x to x+m). Basically, whenever m > log(n) we have: m*(2n-m+1)/2 = (2nm-m*m+m)/2 > (2nlogn-logn*logn+logn)/2 = nlog(n) - log(n*n) + log(n) = nlog(n) + log(n/n*n) = nlog(n) + log(1/n) = nlog(n) - log(n) = (n-1)log(n) So for m < log(n)
- * then m*(2n-m+1)/2 > (n-1)log(n) and m*(2n-m+1)/2 > nlog(n) IDEALLY: In order to best optimize the performance, choose which algorithm to run, based on whether 2^m > n if ( (2<<(e.getItemCount() * amount)) < inventoryContents.length ) // do Algorithm 1, no sorting else // do Algorithm 2, sorting
- * CURRENT IMPLEMENTATION: In general, it is going to be very rare for a person to do a massive exchange of non-stackable items For this reason, we assume that algorithm 1 will always suffice and we keep things simple. If, in the future, it becomes necessary that we optimize, the above discussion
- * should make it clear what optimization exactly is necessary (based on the comments under "IDEALLY").
+ * NOTE: There are 2 ways to achieve the above goal. 1) Get all items that have the correct itemId, loop through them until the lowest enchantment level is found. Repeat all this for the next item until proper count of items is reached. 2) Get all items that have the correct
+ * itemId, sort them once based on enchantment level, and get the range of items that is necessary. Method 1 is faster for a small number of items to be exchanged. Method 2 is faster for large amounts. EXPLANATION: Worst case scenario for algorithm 1 will make it run in a number
+ * of cycles given by: m*(2n-m+1)/2 where m is the number of items to be exchanged and n is the total number of inventory items that have a matching id. With algorithm 2 (sort), sorting takes n*log(n) time and the choice is done in a single cycle for case b (just grab the m first
+ * items) or in linear time for case a (find the beginning of items with correct enchantment, index x, and take all items from x to x+m). Basically, whenever m > log(n) we have: m*(2n-m+1)/2 = (2nm-m*m+m)/2 > (2nlogn-logn*logn+logn)/2 = nlog(n) - log(n*n) + log(n) = nlog(n) +
+ * log(n/n*n) = nlog(n) + log(1/n) = nlog(n) - log(n) = (n-1)log(n) So for m < log(n) then m*(2n-m+1)/2 > (n-1)log(n) and m*(2n-m+1)/2 > nlog(n) IDEALLY: In order to best optimize the performance, choose which algorithm to run, based on whether 2^m > n if ( (2<<(e.getItemCount()
+ * * amount)) < inventoryContents.length ) // do Algorithm 1, no sorting else // do Algorithm 2, sorting CURRENT IMPLEMENTATION: In general, it is going to be very rare for a person to do a massive exchange of non-stackable items For this reason, we assume that algorithm 1 will
+ * always suffice and we keep things simple. If, in the future, it becomes necessary that we optimize, the above discussion should make it clear what optimization exactly is necessary (based on the comments under "IDEALLY").
  */
 
  // choice 1. Small number of items exchanged. No sorting.
Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java
===================================================================
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (revision 1128)
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (working copy)
@@ -52,7 +52,7 @@
  return;
  }
 
- if (!FloodProtector.getInstance().tryPerformAction(activeChar.getObjectId(), FloodProtectorType.PROTECTED_BYPASS))
+ if (!FloodProtector.getInstance().tryPerformAction(activeChar, FloodProtectorType.BYPASS))
  {
  return;
  }
Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestDropItem.java
===================================================================
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestDropItem.java (revision 1128)
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestDropItem.java (working copy)
@@ -62,7 +62,7 @@
  return;
  }
 
- if (!FloodProtector.getInstance().tryPerformAction(activeChar.getObjectId(), FloodProtectorType.PROTECTED_DROPITEM))
+ if (!FloodProtector.getInstance().tryPerformAction(activeChar, FloodProtectorType.DROP_ITEM))
  {
  return;
  }

andres14

  • Jr. Member
  • **
  • Mensajes: 61
  • Karma: +0/-0
    • Ver Perfil
Re:Mana potion bug
« Respuesta #4 en: Octubre 15, 2018, 06:49:39 pm »
Funciono a la perfeccion amigo!!

fissban

  • Administrador
  • Full Member
  • *
  • Mensajes: 196
  • Karma: +0/-0
    • Ver Perfil
Re:Mana potion bug
« Respuesta #5 en: Octubre 16, 2018, 04:17:56 pm »