Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Combinación de Talismanes

Iniciado por Swarlog, Ago 12, 2022, 01:24 AM

Tema anterior - Siguiente tema

Swarlog

   public static void combineTalismans(Player activeChar)
   {
      List<int[]> sameIds = new ArrayList<>();
     
      for (ItemInstance item : activeChar.getInventory().getItems())
      {
         // Getting talisman
         if ((item.getLifeTime() > 0) && item.getName().contains("Talisman"))
         {
            talismanAddToCurrent(sameIds, item.getItemId());
         }
      }
     
      int allCount = 0;
      int newCount = 0;
      for (int[] idCount : sameIds)
      {
         // Item Count > 1
         if (idCount[1] > 1)
         {
            int lifeTime = 0;
            List<ItemInstance> existingTalismans = activeChar.getInventory().getItemsByItemId(idCount[0]);
            for (ItemInstance existingTalisman : existingTalismans)
            {
               lifeTime += existingTalisman.getLifeTime();
               activeChar.getInventory().destroyItem(existingTalisman, "Combine Talismans");
            }
           
            ItemInstance newTalisman = activeChar.getInventory().addItem(idCount[0], 1L, "Combine Talismans");
            newTalisman.setLifeTime(lifeTime);
            newTalisman.setJdbcState(JdbcEntityState.UPDATED);
            newTalisman.update();
            activeChar.sendPacket(new InventoryUpdate().addModifiedItem(newTalisman));
           
            allCount += idCount[0];
            newCount++;
         }
      }
     
      if (allCount > 0)
      {
         activeChar.sendMessage(allCount + " Talismans were combined into " + newCount);
      }
      else
      {
         activeChar.sendMessage("You don't have Talismans to combine!");
      }
   }
   
   private static void talismanAddToCurrent(List<int[]> sameIds, int itemId)
   {
      for (int i = 0; i < sameIds.size(); i++)
      {
         if (sameIds.get(i)[0] == itemId)
         {
            sameIds.get(i)[1] = sameIds.get(i)[1] + 1;
            return;
         }
      }
      sameIds.add(new int[]
      {
         itemId,
         1
      });
   }




     
      else if (command.equalsIgnoreCase("combinetalismans"))
      {
         activeChar.sendMessage("Combining talismans...");
         try
         {
            // TalismanId, List<TalismansWithThisId>
            Map<Integer, List<L2ItemInstance>> talismans = new FastMap<>();
           
            for (L2ItemInstance item : activeChar.getInventory().getItems())
            {
               if (item == null || !item.isShadowItem()) // Talismans are shadow items.
                  continue;
               
               int itemId = item.getItemId();
               // Get only the talismans.
               if (!Util.contains(TALISMAN_IDS, itemId))
                  continue;
               
               if (!talismans.containsKey(itemId))
                  talismans.put(itemId, new FastList<L2ItemInstance>());
               
               talismans.get(itemId).add(item);
            }
           
            activeChar.sendMessage("... results:");
           
            // Now same talismans are under 1 list. Loop this list to combine them.
            for (Entry<Integer, List<L2ItemInstance>> n3 : talismans.entrySet())
            {
               List<L2ItemInstance> sameTalismans = n3.getValue();
               if (sameTalismans.size() <= 1) // We need at least 2 talismans.
                  continue;
               
               List<L2ItemInstance> talismansToCharge = new FastList<>(); // The talisman(s) that isnt(arent) going to be destroyed, but charged.
               
               // First, find the equipped talisman, it is with charge priority.
               for (L2ItemInstance talisman : sameTalismans)
               {
                  if (talisman.isEquipped())
                  {
                     talismansToCharge.add(talisman); // Add to the chargable talismans.
                     sameTalismans.remove(talisman); // and remove it from the list, because we will loop it again and we dont want that item there.
                  }
               }
               
               if (talismansToCharge.isEmpty())
                  talismansToCharge.add(sameTalismans.remove(0));
               
               // Second loop, charge the talismans.
               int index = 0;
               for (L2ItemInstance talisman : sameTalismans)
               {
                  if (index >= talismansToCharge.size())
                     index = 0;
                 
                  L2ItemInstance talismanToCharge = talismansToCharge.get(index++);
                  int chargeMana = talisman.getMana();
                  if (activeChar.destroyItem("Talisman Charge Delete", talisman.getObjectId(), 1, talismanToCharge, false))
                     talismanToCharge.decreaseMana(false, -chargeMana); // Minus in decrease = increase :P
               }
               
               String talismanIdName = ItemTable.getInstance().createDummyItem(n3.getKey()).getName();
               activeChar.sendMessage(talismanIdName + " has successfully combined.");
            }
         }
         catch (Exception e)
         {
            activeChar.sendMessage("There was a problem while combining your talismans, please consult with an admin, and tell him this date: " + Util.getDateString(new Date(System.currentTimeMillis())));
            _log.log(Level.WARNING, "Error while combining talismans: ", e);
         }
      }
     
     
     
     
         public static final int[] TALISMAN_IDS =
   {
      9914, // Blue Talisman of Power
      9915, // Blue Talisman of Wild Magic
      9916, // Blue Talisman of Defense
      9917, // Red Talisman of Minimum Clarity
      9918, // Red Talisman of Maximum Clarity
      9919, // Blue Talisman of Reflection
      9920, // Blue Talisman of Invisibility
      9921, // Blue Talisman - Shield Protection
      9922, // Black Talisman - Mending
      9923, // Black Talisman - Escape
      9924, // Blue Talisman of Healing
      9925, // Red Talisman of Recovery
      9926, // Blue Talisman of Defense
      9927, // Blue Talisman of Magic Defense
      9928, // Red Talisman of Mental Regeneration
      9929, // Blue Talisman of Protection
      9930, // Blue Talisman of Evasion
      9931, // Red Talisman of Meditation
      9932, // Blue Talisman - Divine Protection
      9933, // Yellow Talisman of Power
      9934, // Yellow Talisman of Violent Haste
      9935, // Yellow Talisman of Arcane Defense
      9936, // Yellow Talisman of Arcane Power
      9937, // Yellow Talisman of Arcane Haste
      9938, // Yellow Talisman of Accuracy
      9939, // Yellow Talisman of Defense
      9940, // Yellow Talisman of Alacrity
      9941, // Yellow Talisman of Speed
      9942, // Yellow Talisman of Critical Reduction
      9943, // Yellow Talisman of Critical Damage
      9944, // Yellow Talisman of Critical Dodging
      9945, // Yellow Talisman of Evasion
      9946, // Yellow Talisman of Healing
      9947, // Yellow Talisman of CP Regeneration
      9948, // Yellow Talisman of Physical Regeneration
      9949, // Yellow Talisman of Mental Regeneration
      9950, // Grey Talisman of Weight Training
      9951, // Grey Talisman of Mid-Grade Fishing
      9952, // Orange Talisman - Hot Springs CP Potion
      9953, // Orange Talisman - Elixir of Life
      9954, // Orange Talisman - Elixir of Mental Strength
      9955, // Black Talisman - Vocalization
      9956, // Black Talisman - Arcane Freedom
      9957, // Black Talisman - Physical Freedom
      9958, // Black Talisman - Rescue
      9959, // Black Talisman - Free Speech
      9960, // White Talisman of Bravery
      9961, // White Talisman of Motion
      9962, // White Talisman of Grounding
      9963, // White Talisman of Attention
      9964, // White Talisman of Bandages
      9965, // White Talisman of Protection
      9966, // White Talisman of Freedom
      10141, // Grey Talisman - Yeti Transform
      10142, // Grey Talisman - Buffalo Transform
      10158, // Grey Talisman of Upper Grade Fishing
      10416, // Blue Talisman - Explosion
      10417, // Blue Talisman - Magic Explosion
      10418, // White Talisman - Storm
      10419, // White Talisman - Darkness
      10420, // White Talisman - Water
      10421, // White Talisman - Fire
      10422, // White Talisman - Light
      10423, // Blue Talisman - Self-Destruction
      10424, // Blue Talisman - Greater Healing
      10518, // Red Talisman - Life Force
      10519, // White Talisman -  Earth
      10533, // Blue Talisman - P. Atk.
      10534, // Blue Talisman - Shield Defense
      10535, // Yellow Talisman - P. Def.
      10536, // Yellow Talisman - M. Atk.
      10537, // Yellow Talisman - Evasion
      10538, // Yellow Talisman - Healing Power
      10539, // Yellow Talisman - CP Recovery Rate
      10540, // Yellow Talisman - HP Recovery Rate
      10541, // Yellow Talisman - Low Grade MP Recovery Rate
      10542, // Red Talisman - HP/CP Recovery
      10543, // Yellow Talisman - Speed
      12815, // Red Talisman - Max CP
      12816, // Red Talisman - CP Regeneration
      12817, // Yellow Talisman - Increase Force
      12818, // Yellow Talisman - Damage Transition
      14604, // Red Talisman - Territory Guardian
      14605, // Red Talisman - Territory Guard
      14810, // Blue Talisman - Buff Cancel
      14811, // Blue Talisman - Buff Steal
      14812, // Red Talisman - Territory Guard
      14813, // Blue Talisman - Lord's Divine Protection
      14814, // White Talisman -  All Resistance
      17051, // Talisman - STR
      17052, // Talisman - DEX
      17053, // Talisman - CON
      17054, // Talisman - WIT
      17055, // Talisman - INT
      17056, // Talisman - MEN
      17057, // Talisman - Resistance to Stun
      17058, // Talisman - Resistance to Sleep
      17059, // Talisman - Resistance to Hold
      17060, // Talisman - Paralyze Resistance
      17061, // Talisman - ALL STAT
      22326, // Blue Talisman - Buff Cancel
      22327 // Blue Talisman - Buff Steal
   };

      else if (command.equalsIgnoreCase("combinetalismans"))
      {
         activeChar.sendMessage(new CustomMessage("wp.gameserver.handler.voicecommands.impl.randomcommands.message6", activeChar));
         try
         {
            InventoryUpdate iu = new InventoryUpdate();
            // TalismanId, List<TalismansWithThisId>
            Map<Integer, List<ItemInstance>> talismans = new FastMap<>();
           
            for (ItemInstance item : activeChar.getInventory().getItems())
            {
               if (item == null || !item.isShadowItem()) // Talismans are shadow items.
                  continue;
               
               int itemId = item.getItemId();
               if (!Util.contains(ItemFunctions.TALISMAN_IDS, itemId))
                  continue;
               
               if (!talismans.containsKey(itemId))
                  talismans.put(itemId, new FastTable<ItemInstance>());
               
               talismans.get(itemId).add(item);
            }
           
            activeChar.sendMessage(new CustomMessage("wp.gameserver.handler.voicecommands.impl.randomcommands.message7", activeChar));
           
            // Now same talismans are under 1 list. Loop this list to combine them.
            for (List<ItemInstance> sameTalismans : talismans.values())
            {
               if (sameTalismans.size() <= 1) // We need at least 2 talismans.
                  continue;
               
               ItemInstance talismanToCharge = null; // The talisman that isnt going to be destroyed, but charged.
               talismanToCharge = sameTalismans.stream().filter(t -> t.isEquipped()).findAny().orElse(sameTalismans.remove(0)); // Equipped talismans are chosen to be charged, else a random one.
               
               
               // Charge the talisman with the other talismans of the same kind.
               int lifeTime = talismanToCharge.getLifeTime();
               lifeTime += sameTalismans.stream().filter(t -> activeChar.getInventory().destroyItem(t)).mapToInt(t -> t.getLifeTime()).sum();
               talismanToCharge.setLifeTime(lifeTime);
               talismanToCharge.setJdbcState(JdbcEntityState.UPDATED);
               talismanToCharge.update();
               
               activeChar.sendMessage(new CustomMessage("wp.gameserver.handler.voicecommands.impl.randomcommands.message8", activeChar).addString(talismanToCharge.getName()));
               iu.addModifiedItem(talismanToCharge);
            }
            activeChar.sendPacket(iu);
         }
         catch (Exception e)
         {
            activeChar.sendMessage(new CustomMessage("wp.gameserver.handler.voicecommands.impl.randomcommands.message9", activeChar).addString(TimeUtils.getDateString(new Date(System.currentTimeMillis()))));
            _log.warn("Error while combining talismans: ", e);
         }
      }